// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

package radar

import (
	"context"
	"net/http"
	"net/url"
	"slices"
	"time"

	"github.com/cloudflare/cloudflare-go/v6/internal/apijson"
	"github.com/cloudflare/cloudflare-go/v6/internal/apiquery"
	"github.com/cloudflare/cloudflare-go/v6/internal/param"
	"github.com/cloudflare/cloudflare-go/v6/internal/requestconfig"
	"github.com/cloudflare/cloudflare-go/v6/option"
)

// HTTPSummaryService contains methods and other services that help with
// interacting with the cloudflare API.
//
// Note, unlike clients, this service does not read variables from the environment
// automatically. You should not instantiate this service directly, and instead use
// the [NewHTTPSummaryService] method instead.
type HTTPSummaryService struct {
	Options []option.RequestOption
}

// NewHTTPSummaryService generates a new service that applies the given options to
// each request. These options are applied after the parent client's options (if
// there is one), and before any request-specific options.
func NewHTTPSummaryService(opts ...option.RequestOption) (r *HTTPSummaryService) {
	r = &HTTPSummaryService{}
	r.Options = opts
	return
}

// Retrieves the distribution of bot-generated HTTP requests to genuine human
// traffic, as classified by Cloudflare. Visit
// https://developers.cloudflare.com/radar/concepts/bot-classes/ for more
// information.
//
// Deprecated: Use
// [Radar HTTP Summary By Dimension](https://developers.cloudflare.com/api/resources/radar/subresources/http/methods/summary_v2/)
// instead.
func (r *HTTPSummaryService) BotClass(ctx context.Context, query HTTPSummaryBotClassParams, opts ...option.RequestOption) (res *HTTPSummaryBotClassResponse, err error) {
	var env HTTPSummaryBotClassResponseEnvelope
	opts = slices.Concat(r.Options, opts)
	path := "radar/http/summary/bot_class"
	err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &env, opts...)
	if err != nil {
		return
	}
	res = &env.Result
	return
}

// Retrieves the distribution of HTTP requests generated by mobile, desktop, and
// other types of devices.
//
// Deprecated: Use
// [Radar HTTP Summary By Dimension](https://developers.cloudflare.com/api/resources/radar/subresources/http/methods/summary_v2/)
// instead.
func (r *HTTPSummaryService) DeviceType(ctx context.Context, query HTTPSummaryDeviceTypeParams, opts ...option.RequestOption) (res *HTTPSummaryDeviceTypeResponse, err error) {
	var env HTTPSummaryDeviceTypeResponseEnvelope
	opts = slices.Concat(r.Options, opts)
	path := "radar/http/summary/device_type"
	err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &env, opts...)
	if err != nil {
		return
	}
	res = &env.Result
	return
}

// Retrieves the distribution of HTTP requests by HTTP protocol (HTTP vs. HTTPS).
//
// Deprecated: Use
// [Radar HTTP Summary By Dimension](https://developers.cloudflare.com/api/resources/radar/subresources/http/methods/summary_v2/)
// instead.
func (r *HTTPSummaryService) HTTPProtocol(ctx context.Context, query HTTPSummaryHTTPProtocolParams, opts ...option.RequestOption) (res *HTTPSummaryHTTPProtocolResponse, err error) {
	var env HTTPSummaryHTTPProtocolResponseEnvelope
	opts = slices.Concat(r.Options, opts)
	path := "radar/http/summary/http_protocol"
	err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &env, opts...)
	if err != nil {
		return
	}
	res = &env.Result
	return
}

// Retrieves the distribution of HTTP requests by HTTP version.
//
// Deprecated: Use
// [Radar HTTP Summary By Dimension](https://developers.cloudflare.com/api/resources/radar/subresources/http/methods/summary_v2/)
// instead.
func (r *HTTPSummaryService) HTTPVersion(ctx context.Context, query HTTPSummaryHTTPVersionParams, opts ...option.RequestOption) (res *HTTPSummaryHTTPVersionResponse, err error) {
	var env HTTPSummaryHTTPVersionResponseEnvelope
	opts = slices.Concat(r.Options, opts)
	path := "radar/http/summary/http_version"
	err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &env, opts...)
	if err != nil {
		return
	}
	res = &env.Result
	return
}

// Retrieves the distribution of HTTP requests by IP version.
//
// Deprecated: Use
// [Radar HTTP Summary By Dimension](https://developers.cloudflare.com/api/resources/radar/subresources/http/methods/summary_v2/)
// instead.
func (r *HTTPSummaryService) IPVersion(ctx context.Context, query HTTPSummaryIPVersionParams, opts ...option.RequestOption) (res *HTTPSummaryIPVersionResponse, err error) {
	var env HTTPSummaryIPVersionResponseEnvelope
	opts = slices.Concat(r.Options, opts)
	path := "radar/http/summary/ip_version"
	err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &env, opts...)
	if err != nil {
		return
	}
	res = &env.Result
	return
}

// Retrieves the distribution of HTTP requests by operating system (Windows, macOS,
// Android, iOS, and others).
//
// Deprecated: Use
// [Radar HTTP Summary By Dimension](https://developers.cloudflare.com/api/resources/radar/subresources/http/methods/summary_v2/)
// instead.
func (r *HTTPSummaryService) OS(ctx context.Context, query HTTPSummaryOSParams, opts ...option.RequestOption) (res *HTTPSummaryOSResponse, err error) {
	var env HTTPSummaryOSResponseEnvelope
	opts = slices.Concat(r.Options, opts)
	path := "radar/http/summary/os"
	err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &env, opts...)
	if err != nil {
		return
	}
	res = &env.Result
	return
}

// Retrieves the distribution of HTTP requests by post-quantum support.
//
// Deprecated: Use
// [Radar HTTP Summary By Dimension](https://developers.cloudflare.com/api/resources/radar/subresources/http/methods/summary_v2/)
// instead.
func (r *HTTPSummaryService) PostQuantum(ctx context.Context, query HTTPSummaryPostQuantumParams, opts ...option.RequestOption) (res *HTTPSummaryPostQuantumResponse, err error) {
	var env HTTPSummaryPostQuantumResponseEnvelope
	opts = slices.Concat(r.Options, opts)
	path := "radar/http/summary/post_quantum"
	err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &env, opts...)
	if err != nil {
		return
	}
	res = &env.Result
	return
}

// Retrieves the distribution of HTTP requests by TLS version.
//
// Deprecated: Use
// [Radar HTTP Summary By Dimension](https://developers.cloudflare.com/api/resources/radar/subresources/http/methods/summary_v2/)
// instead.
func (r *HTTPSummaryService) TLSVersion(ctx context.Context, query HTTPSummaryTLSVersionParams, opts ...option.RequestOption) (res *HTTPSummaryTLSVersionResponse, err error) {
	var env HTTPSummaryTLSVersionResponseEnvelope
	opts = slices.Concat(r.Options, opts)
	path := "radar/http/summary/tls_version"
	err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &env, opts...)
	if err != nil {
		return
	}
	res = &env.Result
	return
}

type HTTPSummaryBotClassResponse struct {
	// Metadata for the results.
	Meta     HTTPSummaryBotClassResponseMeta     `json:"meta,required"`
	Summary0 HTTPSummaryBotClassResponseSummary0 `json:"summary_0,required"`
	JSON     httpSummaryBotClassResponseJSON     `json:"-"`
}

// httpSummaryBotClassResponseJSON contains the JSON metadata for the struct
// [HTTPSummaryBotClassResponse]
type httpSummaryBotClassResponseJSON struct {
	Meta        apijson.Field
	Summary0    apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryBotClassResponse) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryBotClassResponseJSON) RawJSON() string {
	return r.raw
}

// Metadata for the results.
type HTTPSummaryBotClassResponseMeta struct {
	ConfidenceInfo HTTPSummaryBotClassResponseMetaConfidenceInfo `json:"confidenceInfo,required"`
	DateRange      []HTTPSummaryBotClassResponseMetaDateRange    `json:"dateRange,required"`
	// Timestamp of the last dataset update.
	LastUpdated time.Time `json:"lastUpdated,required" format:"date-time"`
	// Normalization method applied to the results. Refer to
	// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
	Normalization HTTPSummaryBotClassResponseMetaNormalization `json:"normalization,required"`
	// Measurement units for the results.
	Units []HTTPSummaryBotClassResponseMetaUnit `json:"units,required"`
	JSON  httpSummaryBotClassResponseMetaJSON   `json:"-"`
}

// httpSummaryBotClassResponseMetaJSON contains the JSON metadata for the struct
// [HTTPSummaryBotClassResponseMeta]
type httpSummaryBotClassResponseMetaJSON struct {
	ConfidenceInfo apijson.Field
	DateRange      apijson.Field
	LastUpdated    apijson.Field
	Normalization  apijson.Field
	Units          apijson.Field
	raw            string
	ExtraFields    map[string]apijson.Field
}

func (r *HTTPSummaryBotClassResponseMeta) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryBotClassResponseMetaJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryBotClassResponseMetaConfidenceInfo struct {
	Annotations []HTTPSummaryBotClassResponseMetaConfidenceInfoAnnotation `json:"annotations,required"`
	// Provides an indication of how much confidence Cloudflare has in the data.
	Level int64                                             `json:"level,required"`
	JSON  httpSummaryBotClassResponseMetaConfidenceInfoJSON `json:"-"`
}

// httpSummaryBotClassResponseMetaConfidenceInfoJSON contains the JSON metadata for
// the struct [HTTPSummaryBotClassResponseMetaConfidenceInfo]
type httpSummaryBotClassResponseMetaConfidenceInfoJSON struct {
	Annotations apijson.Field
	Level       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryBotClassResponseMetaConfidenceInfo) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryBotClassResponseMetaConfidenceInfoJSON) RawJSON() string {
	return r.raw
}

// Annotation associated with the result (e.g. outage or other type of event).
type HTTPSummaryBotClassResponseMetaConfidenceInfoAnnotation struct {
	DataSource  string    `json:"dataSource,required"`
	Description string    `json:"description,required"`
	EndDate     time.Time `json:"endDate,required" format:"date-time"`
	EventType   string    `json:"eventType,required"`
	// Whether event is a single point in time or a time range.
	IsInstantaneous bool                                                        `json:"isInstantaneous,required"`
	LinkedURL       string                                                      `json:"linkedUrl,required" format:"uri"`
	StartDate       time.Time                                                   `json:"startDate,required" format:"date-time"`
	JSON            httpSummaryBotClassResponseMetaConfidenceInfoAnnotationJSON `json:"-"`
}

// httpSummaryBotClassResponseMetaConfidenceInfoAnnotationJSON contains the JSON
// metadata for the struct
// [HTTPSummaryBotClassResponseMetaConfidenceInfoAnnotation]
type httpSummaryBotClassResponseMetaConfidenceInfoAnnotationJSON struct {
	DataSource      apijson.Field
	Description     apijson.Field
	EndDate         apijson.Field
	EventType       apijson.Field
	IsInstantaneous apijson.Field
	LinkedURL       apijson.Field
	StartDate       apijson.Field
	raw             string
	ExtraFields     map[string]apijson.Field
}

func (r *HTTPSummaryBotClassResponseMetaConfidenceInfoAnnotation) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryBotClassResponseMetaConfidenceInfoAnnotationJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryBotClassResponseMetaDateRange struct {
	// Adjusted end of date range.
	EndTime time.Time `json:"endTime,required" format:"date-time"`
	// Adjusted start of date range.
	StartTime time.Time                                    `json:"startTime,required" format:"date-time"`
	JSON      httpSummaryBotClassResponseMetaDateRangeJSON `json:"-"`
}

// httpSummaryBotClassResponseMetaDateRangeJSON contains the JSON metadata for the
// struct [HTTPSummaryBotClassResponseMetaDateRange]
type httpSummaryBotClassResponseMetaDateRangeJSON struct {
	EndTime     apijson.Field
	StartTime   apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryBotClassResponseMetaDateRange) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryBotClassResponseMetaDateRangeJSON) RawJSON() string {
	return r.raw
}

// Normalization method applied to the results. Refer to
// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
type HTTPSummaryBotClassResponseMetaNormalization string

const (
	HTTPSummaryBotClassResponseMetaNormalizationPercentage           HTTPSummaryBotClassResponseMetaNormalization = "PERCENTAGE"
	HTTPSummaryBotClassResponseMetaNormalizationMin0Max              HTTPSummaryBotClassResponseMetaNormalization = "MIN0_MAX"
	HTTPSummaryBotClassResponseMetaNormalizationMinMax               HTTPSummaryBotClassResponseMetaNormalization = "MIN_MAX"
	HTTPSummaryBotClassResponseMetaNormalizationRawValues            HTTPSummaryBotClassResponseMetaNormalization = "RAW_VALUES"
	HTTPSummaryBotClassResponseMetaNormalizationPercentageChange     HTTPSummaryBotClassResponseMetaNormalization = "PERCENTAGE_CHANGE"
	HTTPSummaryBotClassResponseMetaNormalizationRollingAverage       HTTPSummaryBotClassResponseMetaNormalization = "ROLLING_AVERAGE"
	HTTPSummaryBotClassResponseMetaNormalizationOverlappedPercentage HTTPSummaryBotClassResponseMetaNormalization = "OVERLAPPED_PERCENTAGE"
	HTTPSummaryBotClassResponseMetaNormalizationRatio                HTTPSummaryBotClassResponseMetaNormalization = "RATIO"
)

func (r HTTPSummaryBotClassResponseMetaNormalization) IsKnown() bool {
	switch r {
	case HTTPSummaryBotClassResponseMetaNormalizationPercentage, HTTPSummaryBotClassResponseMetaNormalizationMin0Max, HTTPSummaryBotClassResponseMetaNormalizationMinMax, HTTPSummaryBotClassResponseMetaNormalizationRawValues, HTTPSummaryBotClassResponseMetaNormalizationPercentageChange, HTTPSummaryBotClassResponseMetaNormalizationRollingAverage, HTTPSummaryBotClassResponseMetaNormalizationOverlappedPercentage, HTTPSummaryBotClassResponseMetaNormalizationRatio:
		return true
	}
	return false
}

type HTTPSummaryBotClassResponseMetaUnit struct {
	Name  string                                  `json:"name,required"`
	Value string                                  `json:"value,required"`
	JSON  httpSummaryBotClassResponseMetaUnitJSON `json:"-"`
}

// httpSummaryBotClassResponseMetaUnitJSON contains the JSON metadata for the
// struct [HTTPSummaryBotClassResponseMetaUnit]
type httpSummaryBotClassResponseMetaUnitJSON struct {
	Name        apijson.Field
	Value       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryBotClassResponseMetaUnit) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryBotClassResponseMetaUnitJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryBotClassResponseSummary0 struct {
	// A numeric string.
	Bot string `json:"bot,required"`
	// A numeric string.
	Human string                                  `json:"human,required"`
	JSON  httpSummaryBotClassResponseSummary0JSON `json:"-"`
}

// httpSummaryBotClassResponseSummary0JSON contains the JSON metadata for the
// struct [HTTPSummaryBotClassResponseSummary0]
type httpSummaryBotClassResponseSummary0JSON struct {
	Bot         apijson.Field
	Human       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryBotClassResponseSummary0) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryBotClassResponseSummary0JSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryDeviceTypeResponse struct {
	// Metadata for the results.
	Meta     HTTPSummaryDeviceTypeResponseMeta     `json:"meta,required"`
	Summary0 HTTPSummaryDeviceTypeResponseSummary0 `json:"summary_0,required"`
	JSON     httpSummaryDeviceTypeResponseJSON     `json:"-"`
}

// httpSummaryDeviceTypeResponseJSON contains the JSON metadata for the struct
// [HTTPSummaryDeviceTypeResponse]
type httpSummaryDeviceTypeResponseJSON struct {
	Meta        apijson.Field
	Summary0    apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryDeviceTypeResponse) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryDeviceTypeResponseJSON) RawJSON() string {
	return r.raw
}

// Metadata for the results.
type HTTPSummaryDeviceTypeResponseMeta struct {
	ConfidenceInfo HTTPSummaryDeviceTypeResponseMetaConfidenceInfo `json:"confidenceInfo,required"`
	DateRange      []HTTPSummaryDeviceTypeResponseMetaDateRange    `json:"dateRange,required"`
	// Timestamp of the last dataset update.
	LastUpdated time.Time `json:"lastUpdated,required" format:"date-time"`
	// Normalization method applied to the results. Refer to
	// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
	Normalization HTTPSummaryDeviceTypeResponseMetaNormalization `json:"normalization,required"`
	// Measurement units for the results.
	Units []HTTPSummaryDeviceTypeResponseMetaUnit `json:"units,required"`
	JSON  httpSummaryDeviceTypeResponseMetaJSON   `json:"-"`
}

// httpSummaryDeviceTypeResponseMetaJSON contains the JSON metadata for the struct
// [HTTPSummaryDeviceTypeResponseMeta]
type httpSummaryDeviceTypeResponseMetaJSON struct {
	ConfidenceInfo apijson.Field
	DateRange      apijson.Field
	LastUpdated    apijson.Field
	Normalization  apijson.Field
	Units          apijson.Field
	raw            string
	ExtraFields    map[string]apijson.Field
}

func (r *HTTPSummaryDeviceTypeResponseMeta) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryDeviceTypeResponseMetaJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryDeviceTypeResponseMetaConfidenceInfo struct {
	Annotations []HTTPSummaryDeviceTypeResponseMetaConfidenceInfoAnnotation `json:"annotations,required"`
	// Provides an indication of how much confidence Cloudflare has in the data.
	Level int64                                               `json:"level,required"`
	JSON  httpSummaryDeviceTypeResponseMetaConfidenceInfoJSON `json:"-"`
}

// httpSummaryDeviceTypeResponseMetaConfidenceInfoJSON contains the JSON metadata
// for the struct [HTTPSummaryDeviceTypeResponseMetaConfidenceInfo]
type httpSummaryDeviceTypeResponseMetaConfidenceInfoJSON struct {
	Annotations apijson.Field
	Level       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryDeviceTypeResponseMetaConfidenceInfo) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryDeviceTypeResponseMetaConfidenceInfoJSON) RawJSON() string {
	return r.raw
}

// Annotation associated with the result (e.g. outage or other type of event).
type HTTPSummaryDeviceTypeResponseMetaConfidenceInfoAnnotation struct {
	DataSource  string    `json:"dataSource,required"`
	Description string    `json:"description,required"`
	EndDate     time.Time `json:"endDate,required" format:"date-time"`
	EventType   string    `json:"eventType,required"`
	// Whether event is a single point in time or a time range.
	IsInstantaneous bool                                                          `json:"isInstantaneous,required"`
	LinkedURL       string                                                        `json:"linkedUrl,required" format:"uri"`
	StartDate       time.Time                                                     `json:"startDate,required" format:"date-time"`
	JSON            httpSummaryDeviceTypeResponseMetaConfidenceInfoAnnotationJSON `json:"-"`
}

// httpSummaryDeviceTypeResponseMetaConfidenceInfoAnnotationJSON contains the JSON
// metadata for the struct
// [HTTPSummaryDeviceTypeResponseMetaConfidenceInfoAnnotation]
type httpSummaryDeviceTypeResponseMetaConfidenceInfoAnnotationJSON struct {
	DataSource      apijson.Field
	Description     apijson.Field
	EndDate         apijson.Field
	EventType       apijson.Field
	IsInstantaneous apijson.Field
	LinkedURL       apijson.Field
	StartDate       apijson.Field
	raw             string
	ExtraFields     map[string]apijson.Field
}

func (r *HTTPSummaryDeviceTypeResponseMetaConfidenceInfoAnnotation) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryDeviceTypeResponseMetaConfidenceInfoAnnotationJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryDeviceTypeResponseMetaDateRange struct {
	// Adjusted end of date range.
	EndTime time.Time `json:"endTime,required" format:"date-time"`
	// Adjusted start of date range.
	StartTime time.Time                                      `json:"startTime,required" format:"date-time"`
	JSON      httpSummaryDeviceTypeResponseMetaDateRangeJSON `json:"-"`
}

// httpSummaryDeviceTypeResponseMetaDateRangeJSON contains the JSON metadata for
// the struct [HTTPSummaryDeviceTypeResponseMetaDateRange]
type httpSummaryDeviceTypeResponseMetaDateRangeJSON struct {
	EndTime     apijson.Field
	StartTime   apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryDeviceTypeResponseMetaDateRange) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryDeviceTypeResponseMetaDateRangeJSON) RawJSON() string {
	return r.raw
}

// Normalization method applied to the results. Refer to
// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
type HTTPSummaryDeviceTypeResponseMetaNormalization string

const (
	HTTPSummaryDeviceTypeResponseMetaNormalizationPercentage           HTTPSummaryDeviceTypeResponseMetaNormalization = "PERCENTAGE"
	HTTPSummaryDeviceTypeResponseMetaNormalizationMin0Max              HTTPSummaryDeviceTypeResponseMetaNormalization = "MIN0_MAX"
	HTTPSummaryDeviceTypeResponseMetaNormalizationMinMax               HTTPSummaryDeviceTypeResponseMetaNormalization = "MIN_MAX"
	HTTPSummaryDeviceTypeResponseMetaNormalizationRawValues            HTTPSummaryDeviceTypeResponseMetaNormalization = "RAW_VALUES"
	HTTPSummaryDeviceTypeResponseMetaNormalizationPercentageChange     HTTPSummaryDeviceTypeResponseMetaNormalization = "PERCENTAGE_CHANGE"
	HTTPSummaryDeviceTypeResponseMetaNormalizationRollingAverage       HTTPSummaryDeviceTypeResponseMetaNormalization = "ROLLING_AVERAGE"
	HTTPSummaryDeviceTypeResponseMetaNormalizationOverlappedPercentage HTTPSummaryDeviceTypeResponseMetaNormalization = "OVERLAPPED_PERCENTAGE"
	HTTPSummaryDeviceTypeResponseMetaNormalizationRatio                HTTPSummaryDeviceTypeResponseMetaNormalization = "RATIO"
)

func (r HTTPSummaryDeviceTypeResponseMetaNormalization) IsKnown() bool {
	switch r {
	case HTTPSummaryDeviceTypeResponseMetaNormalizationPercentage, HTTPSummaryDeviceTypeResponseMetaNormalizationMin0Max, HTTPSummaryDeviceTypeResponseMetaNormalizationMinMax, HTTPSummaryDeviceTypeResponseMetaNormalizationRawValues, HTTPSummaryDeviceTypeResponseMetaNormalizationPercentageChange, HTTPSummaryDeviceTypeResponseMetaNormalizationRollingAverage, HTTPSummaryDeviceTypeResponseMetaNormalizationOverlappedPercentage, HTTPSummaryDeviceTypeResponseMetaNormalizationRatio:
		return true
	}
	return false
}

type HTTPSummaryDeviceTypeResponseMetaUnit struct {
	Name  string                                    `json:"name,required"`
	Value string                                    `json:"value,required"`
	JSON  httpSummaryDeviceTypeResponseMetaUnitJSON `json:"-"`
}

// httpSummaryDeviceTypeResponseMetaUnitJSON contains the JSON metadata for the
// struct [HTTPSummaryDeviceTypeResponseMetaUnit]
type httpSummaryDeviceTypeResponseMetaUnitJSON struct {
	Name        apijson.Field
	Value       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryDeviceTypeResponseMetaUnit) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryDeviceTypeResponseMetaUnitJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryDeviceTypeResponseSummary0 struct {
	// A numeric string.
	Desktop string `json:"desktop,required"`
	// A numeric string.
	Mobile string `json:"mobile,required"`
	// A numeric string.
	Other string                                    `json:"other,required"`
	JSON  httpSummaryDeviceTypeResponseSummary0JSON `json:"-"`
}

// httpSummaryDeviceTypeResponseSummary0JSON contains the JSON metadata for the
// struct [HTTPSummaryDeviceTypeResponseSummary0]
type httpSummaryDeviceTypeResponseSummary0JSON struct {
	Desktop     apijson.Field
	Mobile      apijson.Field
	Other       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryDeviceTypeResponseSummary0) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryDeviceTypeResponseSummary0JSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryHTTPProtocolResponse struct {
	// Metadata for the results.
	Meta     HTTPSummaryHTTPProtocolResponseMeta     `json:"meta,required"`
	Summary0 HTTPSummaryHTTPProtocolResponseSummary0 `json:"summary_0,required"`
	JSON     httpSummaryHTTPProtocolResponseJSON     `json:"-"`
}

// httpSummaryHTTPProtocolResponseJSON contains the JSON metadata for the struct
// [HTTPSummaryHTTPProtocolResponse]
type httpSummaryHTTPProtocolResponseJSON struct {
	Meta        apijson.Field
	Summary0    apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPProtocolResponse) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPProtocolResponseJSON) RawJSON() string {
	return r.raw
}

// Metadata for the results.
type HTTPSummaryHTTPProtocolResponseMeta struct {
	ConfidenceInfo HTTPSummaryHTTPProtocolResponseMetaConfidenceInfo `json:"confidenceInfo,required"`
	DateRange      []HTTPSummaryHTTPProtocolResponseMetaDateRange    `json:"dateRange,required"`
	// Timestamp of the last dataset update.
	LastUpdated time.Time `json:"lastUpdated,required" format:"date-time"`
	// Normalization method applied to the results. Refer to
	// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
	Normalization HTTPSummaryHTTPProtocolResponseMetaNormalization `json:"normalization,required"`
	// Measurement units for the results.
	Units []HTTPSummaryHTTPProtocolResponseMetaUnit `json:"units,required"`
	JSON  httpSummaryHTTPProtocolResponseMetaJSON   `json:"-"`
}

// httpSummaryHTTPProtocolResponseMetaJSON contains the JSON metadata for the
// struct [HTTPSummaryHTTPProtocolResponseMeta]
type httpSummaryHTTPProtocolResponseMetaJSON struct {
	ConfidenceInfo apijson.Field
	DateRange      apijson.Field
	LastUpdated    apijson.Field
	Normalization  apijson.Field
	Units          apijson.Field
	raw            string
	ExtraFields    map[string]apijson.Field
}

func (r *HTTPSummaryHTTPProtocolResponseMeta) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPProtocolResponseMetaJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryHTTPProtocolResponseMetaConfidenceInfo struct {
	Annotations []HTTPSummaryHTTPProtocolResponseMetaConfidenceInfoAnnotation `json:"annotations,required"`
	// Provides an indication of how much confidence Cloudflare has in the data.
	Level int64                                                 `json:"level,required"`
	JSON  httpSummaryHTTPProtocolResponseMetaConfidenceInfoJSON `json:"-"`
}

// httpSummaryHTTPProtocolResponseMetaConfidenceInfoJSON contains the JSON metadata
// for the struct [HTTPSummaryHTTPProtocolResponseMetaConfidenceInfo]
type httpSummaryHTTPProtocolResponseMetaConfidenceInfoJSON struct {
	Annotations apijson.Field
	Level       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPProtocolResponseMetaConfidenceInfo) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPProtocolResponseMetaConfidenceInfoJSON) RawJSON() string {
	return r.raw
}

// Annotation associated with the result (e.g. outage or other type of event).
type HTTPSummaryHTTPProtocolResponseMetaConfidenceInfoAnnotation struct {
	DataSource  string    `json:"dataSource,required"`
	Description string    `json:"description,required"`
	EndDate     time.Time `json:"endDate,required" format:"date-time"`
	EventType   string    `json:"eventType,required"`
	// Whether event is a single point in time or a time range.
	IsInstantaneous bool                                                            `json:"isInstantaneous,required"`
	LinkedURL       string                                                          `json:"linkedUrl,required" format:"uri"`
	StartDate       time.Time                                                       `json:"startDate,required" format:"date-time"`
	JSON            httpSummaryHTTPProtocolResponseMetaConfidenceInfoAnnotationJSON `json:"-"`
}

// httpSummaryHTTPProtocolResponseMetaConfidenceInfoAnnotationJSON contains the
// JSON metadata for the struct
// [HTTPSummaryHTTPProtocolResponseMetaConfidenceInfoAnnotation]
type httpSummaryHTTPProtocolResponseMetaConfidenceInfoAnnotationJSON struct {
	DataSource      apijson.Field
	Description     apijson.Field
	EndDate         apijson.Field
	EventType       apijson.Field
	IsInstantaneous apijson.Field
	LinkedURL       apijson.Field
	StartDate       apijson.Field
	raw             string
	ExtraFields     map[string]apijson.Field
}

func (r *HTTPSummaryHTTPProtocolResponseMetaConfidenceInfoAnnotation) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPProtocolResponseMetaConfidenceInfoAnnotationJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryHTTPProtocolResponseMetaDateRange struct {
	// Adjusted end of date range.
	EndTime time.Time `json:"endTime,required" format:"date-time"`
	// Adjusted start of date range.
	StartTime time.Time                                        `json:"startTime,required" format:"date-time"`
	JSON      httpSummaryHTTPProtocolResponseMetaDateRangeJSON `json:"-"`
}

// httpSummaryHTTPProtocolResponseMetaDateRangeJSON contains the JSON metadata for
// the struct [HTTPSummaryHTTPProtocolResponseMetaDateRange]
type httpSummaryHTTPProtocolResponseMetaDateRangeJSON struct {
	EndTime     apijson.Field
	StartTime   apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPProtocolResponseMetaDateRange) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPProtocolResponseMetaDateRangeJSON) RawJSON() string {
	return r.raw
}

// Normalization method applied to the results. Refer to
// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
type HTTPSummaryHTTPProtocolResponseMetaNormalization string

const (
	HTTPSummaryHTTPProtocolResponseMetaNormalizationPercentage           HTTPSummaryHTTPProtocolResponseMetaNormalization = "PERCENTAGE"
	HTTPSummaryHTTPProtocolResponseMetaNormalizationMin0Max              HTTPSummaryHTTPProtocolResponseMetaNormalization = "MIN0_MAX"
	HTTPSummaryHTTPProtocolResponseMetaNormalizationMinMax               HTTPSummaryHTTPProtocolResponseMetaNormalization = "MIN_MAX"
	HTTPSummaryHTTPProtocolResponseMetaNormalizationRawValues            HTTPSummaryHTTPProtocolResponseMetaNormalization = "RAW_VALUES"
	HTTPSummaryHTTPProtocolResponseMetaNormalizationPercentageChange     HTTPSummaryHTTPProtocolResponseMetaNormalization = "PERCENTAGE_CHANGE"
	HTTPSummaryHTTPProtocolResponseMetaNormalizationRollingAverage       HTTPSummaryHTTPProtocolResponseMetaNormalization = "ROLLING_AVERAGE"
	HTTPSummaryHTTPProtocolResponseMetaNormalizationOverlappedPercentage HTTPSummaryHTTPProtocolResponseMetaNormalization = "OVERLAPPED_PERCENTAGE"
	HTTPSummaryHTTPProtocolResponseMetaNormalizationRatio                HTTPSummaryHTTPProtocolResponseMetaNormalization = "RATIO"
)

func (r HTTPSummaryHTTPProtocolResponseMetaNormalization) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPProtocolResponseMetaNormalizationPercentage, HTTPSummaryHTTPProtocolResponseMetaNormalizationMin0Max, HTTPSummaryHTTPProtocolResponseMetaNormalizationMinMax, HTTPSummaryHTTPProtocolResponseMetaNormalizationRawValues, HTTPSummaryHTTPProtocolResponseMetaNormalizationPercentageChange, HTTPSummaryHTTPProtocolResponseMetaNormalizationRollingAverage, HTTPSummaryHTTPProtocolResponseMetaNormalizationOverlappedPercentage, HTTPSummaryHTTPProtocolResponseMetaNormalizationRatio:
		return true
	}
	return false
}

type HTTPSummaryHTTPProtocolResponseMetaUnit struct {
	Name  string                                      `json:"name,required"`
	Value string                                      `json:"value,required"`
	JSON  httpSummaryHTTPProtocolResponseMetaUnitJSON `json:"-"`
}

// httpSummaryHTTPProtocolResponseMetaUnitJSON contains the JSON metadata for the
// struct [HTTPSummaryHTTPProtocolResponseMetaUnit]
type httpSummaryHTTPProtocolResponseMetaUnitJSON struct {
	Name        apijson.Field
	Value       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPProtocolResponseMetaUnit) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPProtocolResponseMetaUnitJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryHTTPProtocolResponseSummary0 struct {
	// A numeric string.
	HTTP string `json:"http,required"`
	// A numeric string.
	HTTPS string                                      `json:"https,required"`
	JSON  httpSummaryHTTPProtocolResponseSummary0JSON `json:"-"`
}

// httpSummaryHTTPProtocolResponseSummary0JSON contains the JSON metadata for the
// struct [HTTPSummaryHTTPProtocolResponseSummary0]
type httpSummaryHTTPProtocolResponseSummary0JSON struct {
	HTTP        apijson.Field
	HTTPS       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPProtocolResponseSummary0) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPProtocolResponseSummary0JSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryHTTPVersionResponse struct {
	// Metadata for the results.
	Meta     HTTPSummaryHTTPVersionResponseMeta     `json:"meta,required"`
	Summary0 HTTPSummaryHTTPVersionResponseSummary0 `json:"summary_0,required"`
	JSON     httpSummaryHTTPVersionResponseJSON     `json:"-"`
}

// httpSummaryHTTPVersionResponseJSON contains the JSON metadata for the struct
// [HTTPSummaryHTTPVersionResponse]
type httpSummaryHTTPVersionResponseJSON struct {
	Meta        apijson.Field
	Summary0    apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPVersionResponse) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPVersionResponseJSON) RawJSON() string {
	return r.raw
}

// Metadata for the results.
type HTTPSummaryHTTPVersionResponseMeta struct {
	ConfidenceInfo HTTPSummaryHTTPVersionResponseMetaConfidenceInfo `json:"confidenceInfo,required"`
	DateRange      []HTTPSummaryHTTPVersionResponseMetaDateRange    `json:"dateRange,required"`
	// Timestamp of the last dataset update.
	LastUpdated time.Time `json:"lastUpdated,required" format:"date-time"`
	// Normalization method applied to the results. Refer to
	// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
	Normalization HTTPSummaryHTTPVersionResponseMetaNormalization `json:"normalization,required"`
	// Measurement units for the results.
	Units []HTTPSummaryHTTPVersionResponseMetaUnit `json:"units,required"`
	JSON  httpSummaryHTTPVersionResponseMetaJSON   `json:"-"`
}

// httpSummaryHTTPVersionResponseMetaJSON contains the JSON metadata for the struct
// [HTTPSummaryHTTPVersionResponseMeta]
type httpSummaryHTTPVersionResponseMetaJSON struct {
	ConfidenceInfo apijson.Field
	DateRange      apijson.Field
	LastUpdated    apijson.Field
	Normalization  apijson.Field
	Units          apijson.Field
	raw            string
	ExtraFields    map[string]apijson.Field
}

func (r *HTTPSummaryHTTPVersionResponseMeta) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPVersionResponseMetaJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryHTTPVersionResponseMetaConfidenceInfo struct {
	Annotations []HTTPSummaryHTTPVersionResponseMetaConfidenceInfoAnnotation `json:"annotations,required"`
	// Provides an indication of how much confidence Cloudflare has in the data.
	Level int64                                                `json:"level,required"`
	JSON  httpSummaryHTTPVersionResponseMetaConfidenceInfoJSON `json:"-"`
}

// httpSummaryHTTPVersionResponseMetaConfidenceInfoJSON contains the JSON metadata
// for the struct [HTTPSummaryHTTPVersionResponseMetaConfidenceInfo]
type httpSummaryHTTPVersionResponseMetaConfidenceInfoJSON struct {
	Annotations apijson.Field
	Level       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPVersionResponseMetaConfidenceInfo) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPVersionResponseMetaConfidenceInfoJSON) RawJSON() string {
	return r.raw
}

// Annotation associated with the result (e.g. outage or other type of event).
type HTTPSummaryHTTPVersionResponseMetaConfidenceInfoAnnotation struct {
	DataSource  string    `json:"dataSource,required"`
	Description string    `json:"description,required"`
	EndDate     time.Time `json:"endDate,required" format:"date-time"`
	EventType   string    `json:"eventType,required"`
	// Whether event is a single point in time or a time range.
	IsInstantaneous bool                                                           `json:"isInstantaneous,required"`
	LinkedURL       string                                                         `json:"linkedUrl,required" format:"uri"`
	StartDate       time.Time                                                      `json:"startDate,required" format:"date-time"`
	JSON            httpSummaryHTTPVersionResponseMetaConfidenceInfoAnnotationJSON `json:"-"`
}

// httpSummaryHTTPVersionResponseMetaConfidenceInfoAnnotationJSON contains the JSON
// metadata for the struct
// [HTTPSummaryHTTPVersionResponseMetaConfidenceInfoAnnotation]
type httpSummaryHTTPVersionResponseMetaConfidenceInfoAnnotationJSON struct {
	DataSource      apijson.Field
	Description     apijson.Field
	EndDate         apijson.Field
	EventType       apijson.Field
	IsInstantaneous apijson.Field
	LinkedURL       apijson.Field
	StartDate       apijson.Field
	raw             string
	ExtraFields     map[string]apijson.Field
}

func (r *HTTPSummaryHTTPVersionResponseMetaConfidenceInfoAnnotation) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPVersionResponseMetaConfidenceInfoAnnotationJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryHTTPVersionResponseMetaDateRange struct {
	// Adjusted end of date range.
	EndTime time.Time `json:"endTime,required" format:"date-time"`
	// Adjusted start of date range.
	StartTime time.Time                                       `json:"startTime,required" format:"date-time"`
	JSON      httpSummaryHTTPVersionResponseMetaDateRangeJSON `json:"-"`
}

// httpSummaryHTTPVersionResponseMetaDateRangeJSON contains the JSON metadata for
// the struct [HTTPSummaryHTTPVersionResponseMetaDateRange]
type httpSummaryHTTPVersionResponseMetaDateRangeJSON struct {
	EndTime     apijson.Field
	StartTime   apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPVersionResponseMetaDateRange) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPVersionResponseMetaDateRangeJSON) RawJSON() string {
	return r.raw
}

// Normalization method applied to the results. Refer to
// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
type HTTPSummaryHTTPVersionResponseMetaNormalization string

const (
	HTTPSummaryHTTPVersionResponseMetaNormalizationPercentage           HTTPSummaryHTTPVersionResponseMetaNormalization = "PERCENTAGE"
	HTTPSummaryHTTPVersionResponseMetaNormalizationMin0Max              HTTPSummaryHTTPVersionResponseMetaNormalization = "MIN0_MAX"
	HTTPSummaryHTTPVersionResponseMetaNormalizationMinMax               HTTPSummaryHTTPVersionResponseMetaNormalization = "MIN_MAX"
	HTTPSummaryHTTPVersionResponseMetaNormalizationRawValues            HTTPSummaryHTTPVersionResponseMetaNormalization = "RAW_VALUES"
	HTTPSummaryHTTPVersionResponseMetaNormalizationPercentageChange     HTTPSummaryHTTPVersionResponseMetaNormalization = "PERCENTAGE_CHANGE"
	HTTPSummaryHTTPVersionResponseMetaNormalizationRollingAverage       HTTPSummaryHTTPVersionResponseMetaNormalization = "ROLLING_AVERAGE"
	HTTPSummaryHTTPVersionResponseMetaNormalizationOverlappedPercentage HTTPSummaryHTTPVersionResponseMetaNormalization = "OVERLAPPED_PERCENTAGE"
	HTTPSummaryHTTPVersionResponseMetaNormalizationRatio                HTTPSummaryHTTPVersionResponseMetaNormalization = "RATIO"
)

func (r HTTPSummaryHTTPVersionResponseMetaNormalization) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPVersionResponseMetaNormalizationPercentage, HTTPSummaryHTTPVersionResponseMetaNormalizationMin0Max, HTTPSummaryHTTPVersionResponseMetaNormalizationMinMax, HTTPSummaryHTTPVersionResponseMetaNormalizationRawValues, HTTPSummaryHTTPVersionResponseMetaNormalizationPercentageChange, HTTPSummaryHTTPVersionResponseMetaNormalizationRollingAverage, HTTPSummaryHTTPVersionResponseMetaNormalizationOverlappedPercentage, HTTPSummaryHTTPVersionResponseMetaNormalizationRatio:
		return true
	}
	return false
}

type HTTPSummaryHTTPVersionResponseMetaUnit struct {
	Name  string                                     `json:"name,required"`
	Value string                                     `json:"value,required"`
	JSON  httpSummaryHTTPVersionResponseMetaUnitJSON `json:"-"`
}

// httpSummaryHTTPVersionResponseMetaUnitJSON contains the JSON metadata for the
// struct [HTTPSummaryHTTPVersionResponseMetaUnit]
type httpSummaryHTTPVersionResponseMetaUnitJSON struct {
	Name        apijson.Field
	Value       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPVersionResponseMetaUnit) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPVersionResponseMetaUnitJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryHTTPVersionResponseSummary0 struct {
	// A numeric string.
	HTTP1X string `json:"HTTP/1.x,required"`
	// A numeric string.
	HTTP2 string `json:"HTTP/2,required"`
	// A numeric string.
	HTTP3 string                                     `json:"HTTP/3,required"`
	JSON  httpSummaryHTTPVersionResponseSummary0JSON `json:"-"`
}

// httpSummaryHTTPVersionResponseSummary0JSON contains the JSON metadata for the
// struct [HTTPSummaryHTTPVersionResponseSummary0]
type httpSummaryHTTPVersionResponseSummary0JSON struct {
	HTTP1X      apijson.Field
	HTTP2       apijson.Field
	HTTP3       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPVersionResponseSummary0) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPVersionResponseSummary0JSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryIPVersionResponse struct {
	// Metadata for the results.
	Meta     HTTPSummaryIPVersionResponseMeta     `json:"meta,required"`
	Summary0 HTTPSummaryIPVersionResponseSummary0 `json:"summary_0,required"`
	JSON     httpSummaryIPVersionResponseJSON     `json:"-"`
}

// httpSummaryIPVersionResponseJSON contains the JSON metadata for the struct
// [HTTPSummaryIPVersionResponse]
type httpSummaryIPVersionResponseJSON struct {
	Meta        apijson.Field
	Summary0    apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryIPVersionResponse) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryIPVersionResponseJSON) RawJSON() string {
	return r.raw
}

// Metadata for the results.
type HTTPSummaryIPVersionResponseMeta struct {
	ConfidenceInfo HTTPSummaryIPVersionResponseMetaConfidenceInfo `json:"confidenceInfo,required"`
	DateRange      []HTTPSummaryIPVersionResponseMetaDateRange    `json:"dateRange,required"`
	// Timestamp of the last dataset update.
	LastUpdated time.Time `json:"lastUpdated,required" format:"date-time"`
	// Normalization method applied to the results. Refer to
	// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
	Normalization HTTPSummaryIPVersionResponseMetaNormalization `json:"normalization,required"`
	// Measurement units for the results.
	Units []HTTPSummaryIPVersionResponseMetaUnit `json:"units,required"`
	JSON  httpSummaryIPVersionResponseMetaJSON   `json:"-"`
}

// httpSummaryIPVersionResponseMetaJSON contains the JSON metadata for the struct
// [HTTPSummaryIPVersionResponseMeta]
type httpSummaryIPVersionResponseMetaJSON struct {
	ConfidenceInfo apijson.Field
	DateRange      apijson.Field
	LastUpdated    apijson.Field
	Normalization  apijson.Field
	Units          apijson.Field
	raw            string
	ExtraFields    map[string]apijson.Field
}

func (r *HTTPSummaryIPVersionResponseMeta) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryIPVersionResponseMetaJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryIPVersionResponseMetaConfidenceInfo struct {
	Annotations []HTTPSummaryIPVersionResponseMetaConfidenceInfoAnnotation `json:"annotations,required"`
	// Provides an indication of how much confidence Cloudflare has in the data.
	Level int64                                              `json:"level,required"`
	JSON  httpSummaryIPVersionResponseMetaConfidenceInfoJSON `json:"-"`
}

// httpSummaryIPVersionResponseMetaConfidenceInfoJSON contains the JSON metadata
// for the struct [HTTPSummaryIPVersionResponseMetaConfidenceInfo]
type httpSummaryIPVersionResponseMetaConfidenceInfoJSON struct {
	Annotations apijson.Field
	Level       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryIPVersionResponseMetaConfidenceInfo) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryIPVersionResponseMetaConfidenceInfoJSON) RawJSON() string {
	return r.raw
}

// Annotation associated with the result (e.g. outage or other type of event).
type HTTPSummaryIPVersionResponseMetaConfidenceInfoAnnotation struct {
	DataSource  string    `json:"dataSource,required"`
	Description string    `json:"description,required"`
	EndDate     time.Time `json:"endDate,required" format:"date-time"`
	EventType   string    `json:"eventType,required"`
	// Whether event is a single point in time or a time range.
	IsInstantaneous bool                                                         `json:"isInstantaneous,required"`
	LinkedURL       string                                                       `json:"linkedUrl,required" format:"uri"`
	StartDate       time.Time                                                    `json:"startDate,required" format:"date-time"`
	JSON            httpSummaryIPVersionResponseMetaConfidenceInfoAnnotationJSON `json:"-"`
}

// httpSummaryIPVersionResponseMetaConfidenceInfoAnnotationJSON contains the JSON
// metadata for the struct
// [HTTPSummaryIPVersionResponseMetaConfidenceInfoAnnotation]
type httpSummaryIPVersionResponseMetaConfidenceInfoAnnotationJSON struct {
	DataSource      apijson.Field
	Description     apijson.Field
	EndDate         apijson.Field
	EventType       apijson.Field
	IsInstantaneous apijson.Field
	LinkedURL       apijson.Field
	StartDate       apijson.Field
	raw             string
	ExtraFields     map[string]apijson.Field
}

func (r *HTTPSummaryIPVersionResponseMetaConfidenceInfoAnnotation) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryIPVersionResponseMetaConfidenceInfoAnnotationJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryIPVersionResponseMetaDateRange struct {
	// Adjusted end of date range.
	EndTime time.Time `json:"endTime,required" format:"date-time"`
	// Adjusted start of date range.
	StartTime time.Time                                     `json:"startTime,required" format:"date-time"`
	JSON      httpSummaryIPVersionResponseMetaDateRangeJSON `json:"-"`
}

// httpSummaryIPVersionResponseMetaDateRangeJSON contains the JSON metadata for the
// struct [HTTPSummaryIPVersionResponseMetaDateRange]
type httpSummaryIPVersionResponseMetaDateRangeJSON struct {
	EndTime     apijson.Field
	StartTime   apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryIPVersionResponseMetaDateRange) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryIPVersionResponseMetaDateRangeJSON) RawJSON() string {
	return r.raw
}

// Normalization method applied to the results. Refer to
// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
type HTTPSummaryIPVersionResponseMetaNormalization string

const (
	HTTPSummaryIPVersionResponseMetaNormalizationPercentage           HTTPSummaryIPVersionResponseMetaNormalization = "PERCENTAGE"
	HTTPSummaryIPVersionResponseMetaNormalizationMin0Max              HTTPSummaryIPVersionResponseMetaNormalization = "MIN0_MAX"
	HTTPSummaryIPVersionResponseMetaNormalizationMinMax               HTTPSummaryIPVersionResponseMetaNormalization = "MIN_MAX"
	HTTPSummaryIPVersionResponseMetaNormalizationRawValues            HTTPSummaryIPVersionResponseMetaNormalization = "RAW_VALUES"
	HTTPSummaryIPVersionResponseMetaNormalizationPercentageChange     HTTPSummaryIPVersionResponseMetaNormalization = "PERCENTAGE_CHANGE"
	HTTPSummaryIPVersionResponseMetaNormalizationRollingAverage       HTTPSummaryIPVersionResponseMetaNormalization = "ROLLING_AVERAGE"
	HTTPSummaryIPVersionResponseMetaNormalizationOverlappedPercentage HTTPSummaryIPVersionResponseMetaNormalization = "OVERLAPPED_PERCENTAGE"
	HTTPSummaryIPVersionResponseMetaNormalizationRatio                HTTPSummaryIPVersionResponseMetaNormalization = "RATIO"
)

func (r HTTPSummaryIPVersionResponseMetaNormalization) IsKnown() bool {
	switch r {
	case HTTPSummaryIPVersionResponseMetaNormalizationPercentage, HTTPSummaryIPVersionResponseMetaNormalizationMin0Max, HTTPSummaryIPVersionResponseMetaNormalizationMinMax, HTTPSummaryIPVersionResponseMetaNormalizationRawValues, HTTPSummaryIPVersionResponseMetaNormalizationPercentageChange, HTTPSummaryIPVersionResponseMetaNormalizationRollingAverage, HTTPSummaryIPVersionResponseMetaNormalizationOverlappedPercentage, HTTPSummaryIPVersionResponseMetaNormalizationRatio:
		return true
	}
	return false
}

type HTTPSummaryIPVersionResponseMetaUnit struct {
	Name  string                                   `json:"name,required"`
	Value string                                   `json:"value,required"`
	JSON  httpSummaryIPVersionResponseMetaUnitJSON `json:"-"`
}

// httpSummaryIPVersionResponseMetaUnitJSON contains the JSON metadata for the
// struct [HTTPSummaryIPVersionResponseMetaUnit]
type httpSummaryIPVersionResponseMetaUnitJSON struct {
	Name        apijson.Field
	Value       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryIPVersionResponseMetaUnit) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryIPVersionResponseMetaUnitJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryIPVersionResponseSummary0 struct {
	// A numeric string.
	IPv4 string `json:"IPv4,required"`
	// A numeric string.
	IPv6 string                                   `json:"IPv6,required"`
	JSON httpSummaryIPVersionResponseSummary0JSON `json:"-"`
}

// httpSummaryIPVersionResponseSummary0JSON contains the JSON metadata for the
// struct [HTTPSummaryIPVersionResponseSummary0]
type httpSummaryIPVersionResponseSummary0JSON struct {
	IPv4        apijson.Field
	IPv6        apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryIPVersionResponseSummary0) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryIPVersionResponseSummary0JSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryOSResponse struct {
	// Metadata for the results.
	Meta     HTTPSummaryOSResponseMeta     `json:"meta,required"`
	Summary0 HTTPSummaryOSResponseSummary0 `json:"summary_0,required"`
	JSON     httpSummaryOSResponseJSON     `json:"-"`
}

// httpSummaryOSResponseJSON contains the JSON metadata for the struct
// [HTTPSummaryOSResponse]
type httpSummaryOSResponseJSON struct {
	Meta        apijson.Field
	Summary0    apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryOSResponse) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryOSResponseJSON) RawJSON() string {
	return r.raw
}

// Metadata for the results.
type HTTPSummaryOSResponseMeta struct {
	ConfidenceInfo HTTPSummaryOSResponseMetaConfidenceInfo `json:"confidenceInfo,required"`
	DateRange      []HTTPSummaryOSResponseMetaDateRange    `json:"dateRange,required"`
	// Timestamp of the last dataset update.
	LastUpdated time.Time `json:"lastUpdated,required" format:"date-time"`
	// Normalization method applied to the results. Refer to
	// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
	Normalization HTTPSummaryOSResponseMetaNormalization `json:"normalization,required"`
	// Measurement units for the results.
	Units []HTTPSummaryOSResponseMetaUnit `json:"units,required"`
	JSON  httpSummaryOSResponseMetaJSON   `json:"-"`
}

// httpSummaryOSResponseMetaJSON contains the JSON metadata for the struct
// [HTTPSummaryOSResponseMeta]
type httpSummaryOSResponseMetaJSON struct {
	ConfidenceInfo apijson.Field
	DateRange      apijson.Field
	LastUpdated    apijson.Field
	Normalization  apijson.Field
	Units          apijson.Field
	raw            string
	ExtraFields    map[string]apijson.Field
}

func (r *HTTPSummaryOSResponseMeta) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryOSResponseMetaJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryOSResponseMetaConfidenceInfo struct {
	Annotations []HTTPSummaryOSResponseMetaConfidenceInfoAnnotation `json:"annotations,required"`
	// Provides an indication of how much confidence Cloudflare has in the data.
	Level int64                                       `json:"level,required"`
	JSON  httpSummaryOSResponseMetaConfidenceInfoJSON `json:"-"`
}

// httpSummaryOSResponseMetaConfidenceInfoJSON contains the JSON metadata for the
// struct [HTTPSummaryOSResponseMetaConfidenceInfo]
type httpSummaryOSResponseMetaConfidenceInfoJSON struct {
	Annotations apijson.Field
	Level       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryOSResponseMetaConfidenceInfo) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryOSResponseMetaConfidenceInfoJSON) RawJSON() string {
	return r.raw
}

// Annotation associated with the result (e.g. outage or other type of event).
type HTTPSummaryOSResponseMetaConfidenceInfoAnnotation struct {
	DataSource  string    `json:"dataSource,required"`
	Description string    `json:"description,required"`
	EndDate     time.Time `json:"endDate,required" format:"date-time"`
	EventType   string    `json:"eventType,required"`
	// Whether event is a single point in time or a time range.
	IsInstantaneous bool                                                  `json:"isInstantaneous,required"`
	LinkedURL       string                                                `json:"linkedUrl,required" format:"uri"`
	StartDate       time.Time                                             `json:"startDate,required" format:"date-time"`
	JSON            httpSummaryOSResponseMetaConfidenceInfoAnnotationJSON `json:"-"`
}

// httpSummaryOSResponseMetaConfidenceInfoAnnotationJSON contains the JSON metadata
// for the struct [HTTPSummaryOSResponseMetaConfidenceInfoAnnotation]
type httpSummaryOSResponseMetaConfidenceInfoAnnotationJSON struct {
	DataSource      apijson.Field
	Description     apijson.Field
	EndDate         apijson.Field
	EventType       apijson.Field
	IsInstantaneous apijson.Field
	LinkedURL       apijson.Field
	StartDate       apijson.Field
	raw             string
	ExtraFields     map[string]apijson.Field
}

func (r *HTTPSummaryOSResponseMetaConfidenceInfoAnnotation) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryOSResponseMetaConfidenceInfoAnnotationJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryOSResponseMetaDateRange struct {
	// Adjusted end of date range.
	EndTime time.Time `json:"endTime,required" format:"date-time"`
	// Adjusted start of date range.
	StartTime time.Time                              `json:"startTime,required" format:"date-time"`
	JSON      httpSummaryOSResponseMetaDateRangeJSON `json:"-"`
}

// httpSummaryOSResponseMetaDateRangeJSON contains the JSON metadata for the struct
// [HTTPSummaryOSResponseMetaDateRange]
type httpSummaryOSResponseMetaDateRangeJSON struct {
	EndTime     apijson.Field
	StartTime   apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryOSResponseMetaDateRange) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryOSResponseMetaDateRangeJSON) RawJSON() string {
	return r.raw
}

// Normalization method applied to the results. Refer to
// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
type HTTPSummaryOSResponseMetaNormalization string

const (
	HTTPSummaryOSResponseMetaNormalizationPercentage           HTTPSummaryOSResponseMetaNormalization = "PERCENTAGE"
	HTTPSummaryOSResponseMetaNormalizationMin0Max              HTTPSummaryOSResponseMetaNormalization = "MIN0_MAX"
	HTTPSummaryOSResponseMetaNormalizationMinMax               HTTPSummaryOSResponseMetaNormalization = "MIN_MAX"
	HTTPSummaryOSResponseMetaNormalizationRawValues            HTTPSummaryOSResponseMetaNormalization = "RAW_VALUES"
	HTTPSummaryOSResponseMetaNormalizationPercentageChange     HTTPSummaryOSResponseMetaNormalization = "PERCENTAGE_CHANGE"
	HTTPSummaryOSResponseMetaNormalizationRollingAverage       HTTPSummaryOSResponseMetaNormalization = "ROLLING_AVERAGE"
	HTTPSummaryOSResponseMetaNormalizationOverlappedPercentage HTTPSummaryOSResponseMetaNormalization = "OVERLAPPED_PERCENTAGE"
	HTTPSummaryOSResponseMetaNormalizationRatio                HTTPSummaryOSResponseMetaNormalization = "RATIO"
)

func (r HTTPSummaryOSResponseMetaNormalization) IsKnown() bool {
	switch r {
	case HTTPSummaryOSResponseMetaNormalizationPercentage, HTTPSummaryOSResponseMetaNormalizationMin0Max, HTTPSummaryOSResponseMetaNormalizationMinMax, HTTPSummaryOSResponseMetaNormalizationRawValues, HTTPSummaryOSResponseMetaNormalizationPercentageChange, HTTPSummaryOSResponseMetaNormalizationRollingAverage, HTTPSummaryOSResponseMetaNormalizationOverlappedPercentage, HTTPSummaryOSResponseMetaNormalizationRatio:
		return true
	}
	return false
}

type HTTPSummaryOSResponseMetaUnit struct {
	Name  string                            `json:"name,required"`
	Value string                            `json:"value,required"`
	JSON  httpSummaryOSResponseMetaUnitJSON `json:"-"`
}

// httpSummaryOSResponseMetaUnitJSON contains the JSON metadata for the struct
// [HTTPSummaryOSResponseMetaUnit]
type httpSummaryOSResponseMetaUnitJSON struct {
	Name        apijson.Field
	Value       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryOSResponseMetaUnit) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryOSResponseMetaUnitJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryOSResponseSummary0 struct {
	// A numeric string.
	Android string `json:"ANDROID,required"`
	// A numeric string.
	Ios  string                            `json:"IOS,required"`
	JSON httpSummaryOSResponseSummary0JSON `json:"-"`
}

// httpSummaryOSResponseSummary0JSON contains the JSON metadata for the struct
// [HTTPSummaryOSResponseSummary0]
type httpSummaryOSResponseSummary0JSON struct {
	Android     apijson.Field
	Ios         apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryOSResponseSummary0) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryOSResponseSummary0JSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryPostQuantumResponse struct {
	// Metadata for the results.
	Meta     HTTPSummaryPostQuantumResponseMeta     `json:"meta,required"`
	Summary0 HTTPSummaryPostQuantumResponseSummary0 `json:"summary_0,required"`
	JSON     httpSummaryPostQuantumResponseJSON     `json:"-"`
}

// httpSummaryPostQuantumResponseJSON contains the JSON metadata for the struct
// [HTTPSummaryPostQuantumResponse]
type httpSummaryPostQuantumResponseJSON struct {
	Meta        apijson.Field
	Summary0    apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryPostQuantumResponse) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryPostQuantumResponseJSON) RawJSON() string {
	return r.raw
}

// Metadata for the results.
type HTTPSummaryPostQuantumResponseMeta struct {
	ConfidenceInfo HTTPSummaryPostQuantumResponseMetaConfidenceInfo `json:"confidenceInfo,required"`
	DateRange      []HTTPSummaryPostQuantumResponseMetaDateRange    `json:"dateRange,required"`
	// Timestamp of the last dataset update.
	LastUpdated time.Time `json:"lastUpdated,required" format:"date-time"`
	// Normalization method applied to the results. Refer to
	// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
	Normalization HTTPSummaryPostQuantumResponseMetaNormalization `json:"normalization,required"`
	// Measurement units for the results.
	Units []HTTPSummaryPostQuantumResponseMetaUnit `json:"units,required"`
	JSON  httpSummaryPostQuantumResponseMetaJSON   `json:"-"`
}

// httpSummaryPostQuantumResponseMetaJSON contains the JSON metadata for the struct
// [HTTPSummaryPostQuantumResponseMeta]
type httpSummaryPostQuantumResponseMetaJSON struct {
	ConfidenceInfo apijson.Field
	DateRange      apijson.Field
	LastUpdated    apijson.Field
	Normalization  apijson.Field
	Units          apijson.Field
	raw            string
	ExtraFields    map[string]apijson.Field
}

func (r *HTTPSummaryPostQuantumResponseMeta) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryPostQuantumResponseMetaJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryPostQuantumResponseMetaConfidenceInfo struct {
	Annotations []HTTPSummaryPostQuantumResponseMetaConfidenceInfoAnnotation `json:"annotations,required"`
	// Provides an indication of how much confidence Cloudflare has in the data.
	Level int64                                                `json:"level,required"`
	JSON  httpSummaryPostQuantumResponseMetaConfidenceInfoJSON `json:"-"`
}

// httpSummaryPostQuantumResponseMetaConfidenceInfoJSON contains the JSON metadata
// for the struct [HTTPSummaryPostQuantumResponseMetaConfidenceInfo]
type httpSummaryPostQuantumResponseMetaConfidenceInfoJSON struct {
	Annotations apijson.Field
	Level       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryPostQuantumResponseMetaConfidenceInfo) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryPostQuantumResponseMetaConfidenceInfoJSON) RawJSON() string {
	return r.raw
}

// Annotation associated with the result (e.g. outage or other type of event).
type HTTPSummaryPostQuantumResponseMetaConfidenceInfoAnnotation struct {
	DataSource  string    `json:"dataSource,required"`
	Description string    `json:"description,required"`
	EndDate     time.Time `json:"endDate,required" format:"date-time"`
	EventType   string    `json:"eventType,required"`
	// Whether event is a single point in time or a time range.
	IsInstantaneous bool                                                           `json:"isInstantaneous,required"`
	LinkedURL       string                                                         `json:"linkedUrl,required" format:"uri"`
	StartDate       time.Time                                                      `json:"startDate,required" format:"date-time"`
	JSON            httpSummaryPostQuantumResponseMetaConfidenceInfoAnnotationJSON `json:"-"`
}

// httpSummaryPostQuantumResponseMetaConfidenceInfoAnnotationJSON contains the JSON
// metadata for the struct
// [HTTPSummaryPostQuantumResponseMetaConfidenceInfoAnnotation]
type httpSummaryPostQuantumResponseMetaConfidenceInfoAnnotationJSON struct {
	DataSource      apijson.Field
	Description     apijson.Field
	EndDate         apijson.Field
	EventType       apijson.Field
	IsInstantaneous apijson.Field
	LinkedURL       apijson.Field
	StartDate       apijson.Field
	raw             string
	ExtraFields     map[string]apijson.Field
}

func (r *HTTPSummaryPostQuantumResponseMetaConfidenceInfoAnnotation) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryPostQuantumResponseMetaConfidenceInfoAnnotationJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryPostQuantumResponseMetaDateRange struct {
	// Adjusted end of date range.
	EndTime time.Time `json:"endTime,required" format:"date-time"`
	// Adjusted start of date range.
	StartTime time.Time                                       `json:"startTime,required" format:"date-time"`
	JSON      httpSummaryPostQuantumResponseMetaDateRangeJSON `json:"-"`
}

// httpSummaryPostQuantumResponseMetaDateRangeJSON contains the JSON metadata for
// the struct [HTTPSummaryPostQuantumResponseMetaDateRange]
type httpSummaryPostQuantumResponseMetaDateRangeJSON struct {
	EndTime     apijson.Field
	StartTime   apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryPostQuantumResponseMetaDateRange) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryPostQuantumResponseMetaDateRangeJSON) RawJSON() string {
	return r.raw
}

// Normalization method applied to the results. Refer to
// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
type HTTPSummaryPostQuantumResponseMetaNormalization string

const (
	HTTPSummaryPostQuantumResponseMetaNormalizationPercentage           HTTPSummaryPostQuantumResponseMetaNormalization = "PERCENTAGE"
	HTTPSummaryPostQuantumResponseMetaNormalizationMin0Max              HTTPSummaryPostQuantumResponseMetaNormalization = "MIN0_MAX"
	HTTPSummaryPostQuantumResponseMetaNormalizationMinMax               HTTPSummaryPostQuantumResponseMetaNormalization = "MIN_MAX"
	HTTPSummaryPostQuantumResponseMetaNormalizationRawValues            HTTPSummaryPostQuantumResponseMetaNormalization = "RAW_VALUES"
	HTTPSummaryPostQuantumResponseMetaNormalizationPercentageChange     HTTPSummaryPostQuantumResponseMetaNormalization = "PERCENTAGE_CHANGE"
	HTTPSummaryPostQuantumResponseMetaNormalizationRollingAverage       HTTPSummaryPostQuantumResponseMetaNormalization = "ROLLING_AVERAGE"
	HTTPSummaryPostQuantumResponseMetaNormalizationOverlappedPercentage HTTPSummaryPostQuantumResponseMetaNormalization = "OVERLAPPED_PERCENTAGE"
	HTTPSummaryPostQuantumResponseMetaNormalizationRatio                HTTPSummaryPostQuantumResponseMetaNormalization = "RATIO"
)

func (r HTTPSummaryPostQuantumResponseMetaNormalization) IsKnown() bool {
	switch r {
	case HTTPSummaryPostQuantumResponseMetaNormalizationPercentage, HTTPSummaryPostQuantumResponseMetaNormalizationMin0Max, HTTPSummaryPostQuantumResponseMetaNormalizationMinMax, HTTPSummaryPostQuantumResponseMetaNormalizationRawValues, HTTPSummaryPostQuantumResponseMetaNormalizationPercentageChange, HTTPSummaryPostQuantumResponseMetaNormalizationRollingAverage, HTTPSummaryPostQuantumResponseMetaNormalizationOverlappedPercentage, HTTPSummaryPostQuantumResponseMetaNormalizationRatio:
		return true
	}
	return false
}

type HTTPSummaryPostQuantumResponseMetaUnit struct {
	Name  string                                     `json:"name,required"`
	Value string                                     `json:"value,required"`
	JSON  httpSummaryPostQuantumResponseMetaUnitJSON `json:"-"`
}

// httpSummaryPostQuantumResponseMetaUnitJSON contains the JSON metadata for the
// struct [HTTPSummaryPostQuantumResponseMetaUnit]
type httpSummaryPostQuantumResponseMetaUnitJSON struct {
	Name        apijson.Field
	Value       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryPostQuantumResponseMetaUnit) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryPostQuantumResponseMetaUnitJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryPostQuantumResponseSummary0 struct {
	// A numeric string.
	NotSupported string `json:"NOT_SUPPORTED,required"`
	// A numeric string.
	Supported string                                     `json:"SUPPORTED,required"`
	JSON      httpSummaryPostQuantumResponseSummary0JSON `json:"-"`
}

// httpSummaryPostQuantumResponseSummary0JSON contains the JSON metadata for the
// struct [HTTPSummaryPostQuantumResponseSummary0]
type httpSummaryPostQuantumResponseSummary0JSON struct {
	NotSupported apijson.Field
	Supported    apijson.Field
	raw          string
	ExtraFields  map[string]apijson.Field
}

func (r *HTTPSummaryPostQuantumResponseSummary0) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryPostQuantumResponseSummary0JSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryTLSVersionResponse struct {
	// Metadata for the results.
	Meta     HTTPSummaryTLSVersionResponseMeta     `json:"meta,required"`
	Summary0 HTTPSummaryTLSVersionResponseSummary0 `json:"summary_0,required"`
	JSON     httpSummaryTLSVersionResponseJSON     `json:"-"`
}

// httpSummaryTLSVersionResponseJSON contains the JSON metadata for the struct
// [HTTPSummaryTLSVersionResponse]
type httpSummaryTLSVersionResponseJSON struct {
	Meta        apijson.Field
	Summary0    apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryTLSVersionResponse) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryTLSVersionResponseJSON) RawJSON() string {
	return r.raw
}

// Metadata for the results.
type HTTPSummaryTLSVersionResponseMeta struct {
	ConfidenceInfo HTTPSummaryTLSVersionResponseMetaConfidenceInfo `json:"confidenceInfo,required"`
	DateRange      []HTTPSummaryTLSVersionResponseMetaDateRange    `json:"dateRange,required"`
	// Timestamp of the last dataset update.
	LastUpdated time.Time `json:"lastUpdated,required" format:"date-time"`
	// Normalization method applied to the results. Refer to
	// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
	Normalization HTTPSummaryTLSVersionResponseMetaNormalization `json:"normalization,required"`
	// Measurement units for the results.
	Units []HTTPSummaryTLSVersionResponseMetaUnit `json:"units,required"`
	JSON  httpSummaryTLSVersionResponseMetaJSON   `json:"-"`
}

// httpSummaryTLSVersionResponseMetaJSON contains the JSON metadata for the struct
// [HTTPSummaryTLSVersionResponseMeta]
type httpSummaryTLSVersionResponseMetaJSON struct {
	ConfidenceInfo apijson.Field
	DateRange      apijson.Field
	LastUpdated    apijson.Field
	Normalization  apijson.Field
	Units          apijson.Field
	raw            string
	ExtraFields    map[string]apijson.Field
}

func (r *HTTPSummaryTLSVersionResponseMeta) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryTLSVersionResponseMetaJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryTLSVersionResponseMetaConfidenceInfo struct {
	Annotations []HTTPSummaryTLSVersionResponseMetaConfidenceInfoAnnotation `json:"annotations,required"`
	// Provides an indication of how much confidence Cloudflare has in the data.
	Level int64                                               `json:"level,required"`
	JSON  httpSummaryTLSVersionResponseMetaConfidenceInfoJSON `json:"-"`
}

// httpSummaryTLSVersionResponseMetaConfidenceInfoJSON contains the JSON metadata
// for the struct [HTTPSummaryTLSVersionResponseMetaConfidenceInfo]
type httpSummaryTLSVersionResponseMetaConfidenceInfoJSON struct {
	Annotations apijson.Field
	Level       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryTLSVersionResponseMetaConfidenceInfo) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryTLSVersionResponseMetaConfidenceInfoJSON) RawJSON() string {
	return r.raw
}

// Annotation associated with the result (e.g. outage or other type of event).
type HTTPSummaryTLSVersionResponseMetaConfidenceInfoAnnotation struct {
	DataSource  string    `json:"dataSource,required"`
	Description string    `json:"description,required"`
	EndDate     time.Time `json:"endDate,required" format:"date-time"`
	EventType   string    `json:"eventType,required"`
	// Whether event is a single point in time or a time range.
	IsInstantaneous bool                                                          `json:"isInstantaneous,required"`
	LinkedURL       string                                                        `json:"linkedUrl,required" format:"uri"`
	StartDate       time.Time                                                     `json:"startDate,required" format:"date-time"`
	JSON            httpSummaryTLSVersionResponseMetaConfidenceInfoAnnotationJSON `json:"-"`
}

// httpSummaryTLSVersionResponseMetaConfidenceInfoAnnotationJSON contains the JSON
// metadata for the struct
// [HTTPSummaryTLSVersionResponseMetaConfidenceInfoAnnotation]
type httpSummaryTLSVersionResponseMetaConfidenceInfoAnnotationJSON struct {
	DataSource      apijson.Field
	Description     apijson.Field
	EndDate         apijson.Field
	EventType       apijson.Field
	IsInstantaneous apijson.Field
	LinkedURL       apijson.Field
	StartDate       apijson.Field
	raw             string
	ExtraFields     map[string]apijson.Field
}

func (r *HTTPSummaryTLSVersionResponseMetaConfidenceInfoAnnotation) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryTLSVersionResponseMetaConfidenceInfoAnnotationJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryTLSVersionResponseMetaDateRange struct {
	// Adjusted end of date range.
	EndTime time.Time `json:"endTime,required" format:"date-time"`
	// Adjusted start of date range.
	StartTime time.Time                                      `json:"startTime,required" format:"date-time"`
	JSON      httpSummaryTLSVersionResponseMetaDateRangeJSON `json:"-"`
}

// httpSummaryTLSVersionResponseMetaDateRangeJSON contains the JSON metadata for
// the struct [HTTPSummaryTLSVersionResponseMetaDateRange]
type httpSummaryTLSVersionResponseMetaDateRangeJSON struct {
	EndTime     apijson.Field
	StartTime   apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryTLSVersionResponseMetaDateRange) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryTLSVersionResponseMetaDateRangeJSON) RawJSON() string {
	return r.raw
}

// Normalization method applied to the results. Refer to
// [Normalization methods](https://developers.cloudflare.com/radar/concepts/normalization/).
type HTTPSummaryTLSVersionResponseMetaNormalization string

const (
	HTTPSummaryTLSVersionResponseMetaNormalizationPercentage           HTTPSummaryTLSVersionResponseMetaNormalization = "PERCENTAGE"
	HTTPSummaryTLSVersionResponseMetaNormalizationMin0Max              HTTPSummaryTLSVersionResponseMetaNormalization = "MIN0_MAX"
	HTTPSummaryTLSVersionResponseMetaNormalizationMinMax               HTTPSummaryTLSVersionResponseMetaNormalization = "MIN_MAX"
	HTTPSummaryTLSVersionResponseMetaNormalizationRawValues            HTTPSummaryTLSVersionResponseMetaNormalization = "RAW_VALUES"
	HTTPSummaryTLSVersionResponseMetaNormalizationPercentageChange     HTTPSummaryTLSVersionResponseMetaNormalization = "PERCENTAGE_CHANGE"
	HTTPSummaryTLSVersionResponseMetaNormalizationRollingAverage       HTTPSummaryTLSVersionResponseMetaNormalization = "ROLLING_AVERAGE"
	HTTPSummaryTLSVersionResponseMetaNormalizationOverlappedPercentage HTTPSummaryTLSVersionResponseMetaNormalization = "OVERLAPPED_PERCENTAGE"
	HTTPSummaryTLSVersionResponseMetaNormalizationRatio                HTTPSummaryTLSVersionResponseMetaNormalization = "RATIO"
)

func (r HTTPSummaryTLSVersionResponseMetaNormalization) IsKnown() bool {
	switch r {
	case HTTPSummaryTLSVersionResponseMetaNormalizationPercentage, HTTPSummaryTLSVersionResponseMetaNormalizationMin0Max, HTTPSummaryTLSVersionResponseMetaNormalizationMinMax, HTTPSummaryTLSVersionResponseMetaNormalizationRawValues, HTTPSummaryTLSVersionResponseMetaNormalizationPercentageChange, HTTPSummaryTLSVersionResponseMetaNormalizationRollingAverage, HTTPSummaryTLSVersionResponseMetaNormalizationOverlappedPercentage, HTTPSummaryTLSVersionResponseMetaNormalizationRatio:
		return true
	}
	return false
}

type HTTPSummaryTLSVersionResponseMetaUnit struct {
	Name  string                                    `json:"name,required"`
	Value string                                    `json:"value,required"`
	JSON  httpSummaryTLSVersionResponseMetaUnitJSON `json:"-"`
}

// httpSummaryTLSVersionResponseMetaUnitJSON contains the JSON metadata for the
// struct [HTTPSummaryTLSVersionResponseMetaUnit]
type httpSummaryTLSVersionResponseMetaUnitJSON struct {
	Name        apijson.Field
	Value       apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryTLSVersionResponseMetaUnit) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryTLSVersionResponseMetaUnitJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryTLSVersionResponseSummary0 struct {
	// A numeric string.
	TLS1_0 string `json:"TLS 1.0,required"`
	// A numeric string.
	TLS1_1 string `json:"TLS 1.1,required"`
	// A numeric string.
	TLS1_2 string `json:"TLS 1.2,required"`
	// A numeric string.
	TLS1_3 string `json:"TLS 1.3,required"`
	// A numeric string.
	TLSQuic string                                    `json:"TLS QUIC,required"`
	JSON    httpSummaryTLSVersionResponseSummary0JSON `json:"-"`
}

// httpSummaryTLSVersionResponseSummary0JSON contains the JSON metadata for the
// struct [HTTPSummaryTLSVersionResponseSummary0]
type httpSummaryTLSVersionResponseSummary0JSON struct {
	TLS1_0      apijson.Field
	TLS1_1      apijson.Field
	TLS1_2      apijson.Field
	TLS1_3      apijson.Field
	TLSQuic     apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryTLSVersionResponseSummary0) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryTLSVersionResponseSummary0JSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryBotClassParams struct {
	// Filters results by Autonomous System. Specify one or more Autonomous System
	// Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from
	// results. For example, `-174, 3356` excludes results from AS174, but includes
	// results from AS3356.
	ASN param.Field[[]string] `query:"asn"`
	// Filters results by browser family.
	BrowserFamily param.Field[[]HTTPSummaryBotClassParamsBrowserFamily] `query:"browserFamily"`
	// Filters results by continent. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude continents from results. For example, `-EU,NA`
	// excludes results from EU, but includes results from NA.
	Continent param.Field[[]string] `query:"continent"`
	// End of the date range (inclusive).
	DateEnd param.Field[[]time.Time] `query:"dateEnd" format:"date-time"`
	// Filters results by date range. For example, use `7d` and `7dcontrol` to compare
	// this week with the previous week. Use this parameter or set specific start and
	// end dates (`dateStart` and `dateEnd` parameters).
	DateRange param.Field[[]string] `query:"dateRange"`
	// Start of the date range.
	DateStart param.Field[[]time.Time] `query:"dateStart" format:"date-time"`
	// Filters results by device type.
	DeviceType param.Field[[]HTTPSummaryBotClassParamsDeviceType] `query:"deviceType"`
	// Format in which results will be returned.
	Format param.Field[HTTPSummaryBotClassParamsFormat] `query:"format"`
	// Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs.
	// Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689`
	// excludes results from the 2267056 (Lisbon), but includes results from 5128638
	// (New York).
	GeoID param.Field[[]string] `query:"geoId"`
	// Filters results by HTTP protocol (HTTP vs. HTTPS).
	HTTPProtocol param.Field[[]HTTPSummaryBotClassParamsHTTPProtocol] `query:"httpProtocol"`
	// Filters results by HTTP version.
	HTTPVersion param.Field[[]HTTPSummaryBotClassParamsHTTPVersion] `query:"httpVersion"`
	// Filters results by IP version (Ipv4 vs. IPv6).
	IPVersion param.Field[[]HTTPSummaryBotClassParamsIPVersion] `query:"ipVersion"`
	// Filters results by location. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude locations from results. For example, `-US,PT`
	// excludes results from the US, but includes results from PT.
	Location param.Field[[]string] `query:"location"`
	// Array of names used to label the series in the response.
	Name param.Field[[]string] `query:"name"`
	// Filters results by operating system.
	OS param.Field[[]HTTPSummaryBotClassParamsOS] `query:"os"`
	// Filters results by TLS version.
	TLSVersion param.Field[[]HTTPSummaryBotClassParamsTLSVersion] `query:"tlsVersion"`
}

// URLQuery serializes [HTTPSummaryBotClassParams]'s query parameters as
// `url.Values`.
func (r HTTPSummaryBotClassParams) URLQuery() (v url.Values) {
	return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
		ArrayFormat:  apiquery.ArrayQueryFormatRepeat,
		NestedFormat: apiquery.NestedQueryFormatDots,
	})
}

type HTTPSummaryBotClassParamsBrowserFamily string

const (
	HTTPSummaryBotClassParamsBrowserFamilyChrome  HTTPSummaryBotClassParamsBrowserFamily = "CHROME"
	HTTPSummaryBotClassParamsBrowserFamilyEdge    HTTPSummaryBotClassParamsBrowserFamily = "EDGE"
	HTTPSummaryBotClassParamsBrowserFamilyFirefox HTTPSummaryBotClassParamsBrowserFamily = "FIREFOX"
	HTTPSummaryBotClassParamsBrowserFamilySafari  HTTPSummaryBotClassParamsBrowserFamily = "SAFARI"
)

func (r HTTPSummaryBotClassParamsBrowserFamily) IsKnown() bool {
	switch r {
	case HTTPSummaryBotClassParamsBrowserFamilyChrome, HTTPSummaryBotClassParamsBrowserFamilyEdge, HTTPSummaryBotClassParamsBrowserFamilyFirefox, HTTPSummaryBotClassParamsBrowserFamilySafari:
		return true
	}
	return false
}

type HTTPSummaryBotClassParamsDeviceType string

const (
	HTTPSummaryBotClassParamsDeviceTypeDesktop HTTPSummaryBotClassParamsDeviceType = "DESKTOP"
	HTTPSummaryBotClassParamsDeviceTypeMobile  HTTPSummaryBotClassParamsDeviceType = "MOBILE"
	HTTPSummaryBotClassParamsDeviceTypeOther   HTTPSummaryBotClassParamsDeviceType = "OTHER"
)

func (r HTTPSummaryBotClassParamsDeviceType) IsKnown() bool {
	switch r {
	case HTTPSummaryBotClassParamsDeviceTypeDesktop, HTTPSummaryBotClassParamsDeviceTypeMobile, HTTPSummaryBotClassParamsDeviceTypeOther:
		return true
	}
	return false
}

// Format in which results will be returned.
type HTTPSummaryBotClassParamsFormat string

const (
	HTTPSummaryBotClassParamsFormatJson HTTPSummaryBotClassParamsFormat = "JSON"
	HTTPSummaryBotClassParamsFormatCsv  HTTPSummaryBotClassParamsFormat = "CSV"
)

func (r HTTPSummaryBotClassParamsFormat) IsKnown() bool {
	switch r {
	case HTTPSummaryBotClassParamsFormatJson, HTTPSummaryBotClassParamsFormatCsv:
		return true
	}
	return false
}

type HTTPSummaryBotClassParamsHTTPProtocol string

const (
	HTTPSummaryBotClassParamsHTTPProtocolHTTP  HTTPSummaryBotClassParamsHTTPProtocol = "HTTP"
	HTTPSummaryBotClassParamsHTTPProtocolHTTPS HTTPSummaryBotClassParamsHTTPProtocol = "HTTPS"
)

func (r HTTPSummaryBotClassParamsHTTPProtocol) IsKnown() bool {
	switch r {
	case HTTPSummaryBotClassParamsHTTPProtocolHTTP, HTTPSummaryBotClassParamsHTTPProtocolHTTPS:
		return true
	}
	return false
}

type HTTPSummaryBotClassParamsHTTPVersion string

const (
	HTTPSummaryBotClassParamsHTTPVersionHttPv1 HTTPSummaryBotClassParamsHTTPVersion = "HTTPv1"
	HTTPSummaryBotClassParamsHTTPVersionHttPv2 HTTPSummaryBotClassParamsHTTPVersion = "HTTPv2"
	HTTPSummaryBotClassParamsHTTPVersionHttPv3 HTTPSummaryBotClassParamsHTTPVersion = "HTTPv3"
)

func (r HTTPSummaryBotClassParamsHTTPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryBotClassParamsHTTPVersionHttPv1, HTTPSummaryBotClassParamsHTTPVersionHttPv2, HTTPSummaryBotClassParamsHTTPVersionHttPv3:
		return true
	}
	return false
}

type HTTPSummaryBotClassParamsIPVersion string

const (
	HTTPSummaryBotClassParamsIPVersionIPv4 HTTPSummaryBotClassParamsIPVersion = "IPv4"
	HTTPSummaryBotClassParamsIPVersionIPv6 HTTPSummaryBotClassParamsIPVersion = "IPv6"
)

func (r HTTPSummaryBotClassParamsIPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryBotClassParamsIPVersionIPv4, HTTPSummaryBotClassParamsIPVersionIPv6:
		return true
	}
	return false
}

type HTTPSummaryBotClassParamsOS string

const (
	HTTPSummaryBotClassParamsOSWindows  HTTPSummaryBotClassParamsOS = "WINDOWS"
	HTTPSummaryBotClassParamsOSMacosx   HTTPSummaryBotClassParamsOS = "MACOSX"
	HTTPSummaryBotClassParamsOSIos      HTTPSummaryBotClassParamsOS = "IOS"
	HTTPSummaryBotClassParamsOSAndroid  HTTPSummaryBotClassParamsOS = "ANDROID"
	HTTPSummaryBotClassParamsOSChromeos HTTPSummaryBotClassParamsOS = "CHROMEOS"
	HTTPSummaryBotClassParamsOSLinux    HTTPSummaryBotClassParamsOS = "LINUX"
	HTTPSummaryBotClassParamsOSSmartTv  HTTPSummaryBotClassParamsOS = "SMART_TV"
)

func (r HTTPSummaryBotClassParamsOS) IsKnown() bool {
	switch r {
	case HTTPSummaryBotClassParamsOSWindows, HTTPSummaryBotClassParamsOSMacosx, HTTPSummaryBotClassParamsOSIos, HTTPSummaryBotClassParamsOSAndroid, HTTPSummaryBotClassParamsOSChromeos, HTTPSummaryBotClassParamsOSLinux, HTTPSummaryBotClassParamsOSSmartTv:
		return true
	}
	return false
}

type HTTPSummaryBotClassParamsTLSVersion string

const (
	HTTPSummaryBotClassParamsTLSVersionTlSv1_0  HTTPSummaryBotClassParamsTLSVersion = "TLSv1_0"
	HTTPSummaryBotClassParamsTLSVersionTlSv1_1  HTTPSummaryBotClassParamsTLSVersion = "TLSv1_1"
	HTTPSummaryBotClassParamsTLSVersionTlSv1_2  HTTPSummaryBotClassParamsTLSVersion = "TLSv1_2"
	HTTPSummaryBotClassParamsTLSVersionTlSv1_3  HTTPSummaryBotClassParamsTLSVersion = "TLSv1_3"
	HTTPSummaryBotClassParamsTLSVersionTlSvQuic HTTPSummaryBotClassParamsTLSVersion = "TLSvQUIC"
)

func (r HTTPSummaryBotClassParamsTLSVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryBotClassParamsTLSVersionTlSv1_0, HTTPSummaryBotClassParamsTLSVersionTlSv1_1, HTTPSummaryBotClassParamsTLSVersionTlSv1_2, HTTPSummaryBotClassParamsTLSVersionTlSv1_3, HTTPSummaryBotClassParamsTLSVersionTlSvQuic:
		return true
	}
	return false
}

type HTTPSummaryBotClassResponseEnvelope struct {
	Result  HTTPSummaryBotClassResponse             `json:"result,required"`
	Success bool                                    `json:"success,required"`
	JSON    httpSummaryBotClassResponseEnvelopeJSON `json:"-"`
}

// httpSummaryBotClassResponseEnvelopeJSON contains the JSON metadata for the
// struct [HTTPSummaryBotClassResponseEnvelope]
type httpSummaryBotClassResponseEnvelopeJSON struct {
	Result      apijson.Field
	Success     apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryBotClassResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryBotClassResponseEnvelopeJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryDeviceTypeParams struct {
	// Filters results by Autonomous System. Specify one or more Autonomous System
	// Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from
	// results. For example, `-174, 3356` excludes results from AS174, but includes
	// results from AS3356.
	ASN param.Field[[]string] `query:"asn"`
	// Filters results by bot class. Refer to
	// [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/).
	BotClass param.Field[[]HTTPSummaryDeviceTypeParamsBotClass] `query:"botClass"`
	// Filters results by browser family.
	BrowserFamily param.Field[[]HTTPSummaryDeviceTypeParamsBrowserFamily] `query:"browserFamily"`
	// Filters results by continent. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude continents from results. For example, `-EU,NA`
	// excludes results from EU, but includes results from NA.
	Continent param.Field[[]string] `query:"continent"`
	// End of the date range (inclusive).
	DateEnd param.Field[[]time.Time] `query:"dateEnd" format:"date-time"`
	// Filters results by date range. For example, use `7d` and `7dcontrol` to compare
	// this week with the previous week. Use this parameter or set specific start and
	// end dates (`dateStart` and `dateEnd` parameters).
	DateRange param.Field[[]string] `query:"dateRange"`
	// Start of the date range.
	DateStart param.Field[[]time.Time] `query:"dateStart" format:"date-time"`
	// Format in which results will be returned.
	Format param.Field[HTTPSummaryDeviceTypeParamsFormat] `query:"format"`
	// Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs.
	// Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689`
	// excludes results from the 2267056 (Lisbon), but includes results from 5128638
	// (New York).
	GeoID param.Field[[]string] `query:"geoId"`
	// Filters results by HTTP protocol (HTTP vs. HTTPS).
	HTTPProtocol param.Field[[]HTTPSummaryDeviceTypeParamsHTTPProtocol] `query:"httpProtocol"`
	// Filters results by HTTP version.
	HTTPVersion param.Field[[]HTTPSummaryDeviceTypeParamsHTTPVersion] `query:"httpVersion"`
	// Filters results by IP version (Ipv4 vs. IPv6).
	IPVersion param.Field[[]HTTPSummaryDeviceTypeParamsIPVersion] `query:"ipVersion"`
	// Filters results by location. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude locations from results. For example, `-US,PT`
	// excludes results from the US, but includes results from PT.
	Location param.Field[[]string] `query:"location"`
	// Array of names used to label the series in the response.
	Name param.Field[[]string] `query:"name"`
	// Filters results by operating system.
	OS param.Field[[]HTTPSummaryDeviceTypeParamsOS] `query:"os"`
	// Filters results by TLS version.
	TLSVersion param.Field[[]HTTPSummaryDeviceTypeParamsTLSVersion] `query:"tlsVersion"`
}

// URLQuery serializes [HTTPSummaryDeviceTypeParams]'s query parameters as
// `url.Values`.
func (r HTTPSummaryDeviceTypeParams) URLQuery() (v url.Values) {
	return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
		ArrayFormat:  apiquery.ArrayQueryFormatRepeat,
		NestedFormat: apiquery.NestedQueryFormatDots,
	})
}

type HTTPSummaryDeviceTypeParamsBotClass string

const (
	HTTPSummaryDeviceTypeParamsBotClassLikelyAutomated HTTPSummaryDeviceTypeParamsBotClass = "LIKELY_AUTOMATED"
	HTTPSummaryDeviceTypeParamsBotClassLikelyHuman     HTTPSummaryDeviceTypeParamsBotClass = "LIKELY_HUMAN"
)

func (r HTTPSummaryDeviceTypeParamsBotClass) IsKnown() bool {
	switch r {
	case HTTPSummaryDeviceTypeParamsBotClassLikelyAutomated, HTTPSummaryDeviceTypeParamsBotClassLikelyHuman:
		return true
	}
	return false
}

type HTTPSummaryDeviceTypeParamsBrowserFamily string

const (
	HTTPSummaryDeviceTypeParamsBrowserFamilyChrome  HTTPSummaryDeviceTypeParamsBrowserFamily = "CHROME"
	HTTPSummaryDeviceTypeParamsBrowserFamilyEdge    HTTPSummaryDeviceTypeParamsBrowserFamily = "EDGE"
	HTTPSummaryDeviceTypeParamsBrowserFamilyFirefox HTTPSummaryDeviceTypeParamsBrowserFamily = "FIREFOX"
	HTTPSummaryDeviceTypeParamsBrowserFamilySafari  HTTPSummaryDeviceTypeParamsBrowserFamily = "SAFARI"
)

func (r HTTPSummaryDeviceTypeParamsBrowserFamily) IsKnown() bool {
	switch r {
	case HTTPSummaryDeviceTypeParamsBrowserFamilyChrome, HTTPSummaryDeviceTypeParamsBrowserFamilyEdge, HTTPSummaryDeviceTypeParamsBrowserFamilyFirefox, HTTPSummaryDeviceTypeParamsBrowserFamilySafari:
		return true
	}
	return false
}

// Format in which results will be returned.
type HTTPSummaryDeviceTypeParamsFormat string

const (
	HTTPSummaryDeviceTypeParamsFormatJson HTTPSummaryDeviceTypeParamsFormat = "JSON"
	HTTPSummaryDeviceTypeParamsFormatCsv  HTTPSummaryDeviceTypeParamsFormat = "CSV"
)

func (r HTTPSummaryDeviceTypeParamsFormat) IsKnown() bool {
	switch r {
	case HTTPSummaryDeviceTypeParamsFormatJson, HTTPSummaryDeviceTypeParamsFormatCsv:
		return true
	}
	return false
}

type HTTPSummaryDeviceTypeParamsHTTPProtocol string

const (
	HTTPSummaryDeviceTypeParamsHTTPProtocolHTTP  HTTPSummaryDeviceTypeParamsHTTPProtocol = "HTTP"
	HTTPSummaryDeviceTypeParamsHTTPProtocolHTTPS HTTPSummaryDeviceTypeParamsHTTPProtocol = "HTTPS"
)

func (r HTTPSummaryDeviceTypeParamsHTTPProtocol) IsKnown() bool {
	switch r {
	case HTTPSummaryDeviceTypeParamsHTTPProtocolHTTP, HTTPSummaryDeviceTypeParamsHTTPProtocolHTTPS:
		return true
	}
	return false
}

type HTTPSummaryDeviceTypeParamsHTTPVersion string

const (
	HTTPSummaryDeviceTypeParamsHTTPVersionHttPv1 HTTPSummaryDeviceTypeParamsHTTPVersion = "HTTPv1"
	HTTPSummaryDeviceTypeParamsHTTPVersionHttPv2 HTTPSummaryDeviceTypeParamsHTTPVersion = "HTTPv2"
	HTTPSummaryDeviceTypeParamsHTTPVersionHttPv3 HTTPSummaryDeviceTypeParamsHTTPVersion = "HTTPv3"
)

func (r HTTPSummaryDeviceTypeParamsHTTPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryDeviceTypeParamsHTTPVersionHttPv1, HTTPSummaryDeviceTypeParamsHTTPVersionHttPv2, HTTPSummaryDeviceTypeParamsHTTPVersionHttPv3:
		return true
	}
	return false
}

type HTTPSummaryDeviceTypeParamsIPVersion string

const (
	HTTPSummaryDeviceTypeParamsIPVersionIPv4 HTTPSummaryDeviceTypeParamsIPVersion = "IPv4"
	HTTPSummaryDeviceTypeParamsIPVersionIPv6 HTTPSummaryDeviceTypeParamsIPVersion = "IPv6"
)

func (r HTTPSummaryDeviceTypeParamsIPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryDeviceTypeParamsIPVersionIPv4, HTTPSummaryDeviceTypeParamsIPVersionIPv6:
		return true
	}
	return false
}

type HTTPSummaryDeviceTypeParamsOS string

const (
	HTTPSummaryDeviceTypeParamsOSWindows  HTTPSummaryDeviceTypeParamsOS = "WINDOWS"
	HTTPSummaryDeviceTypeParamsOSMacosx   HTTPSummaryDeviceTypeParamsOS = "MACOSX"
	HTTPSummaryDeviceTypeParamsOSIos      HTTPSummaryDeviceTypeParamsOS = "IOS"
	HTTPSummaryDeviceTypeParamsOSAndroid  HTTPSummaryDeviceTypeParamsOS = "ANDROID"
	HTTPSummaryDeviceTypeParamsOSChromeos HTTPSummaryDeviceTypeParamsOS = "CHROMEOS"
	HTTPSummaryDeviceTypeParamsOSLinux    HTTPSummaryDeviceTypeParamsOS = "LINUX"
	HTTPSummaryDeviceTypeParamsOSSmartTv  HTTPSummaryDeviceTypeParamsOS = "SMART_TV"
)

func (r HTTPSummaryDeviceTypeParamsOS) IsKnown() bool {
	switch r {
	case HTTPSummaryDeviceTypeParamsOSWindows, HTTPSummaryDeviceTypeParamsOSMacosx, HTTPSummaryDeviceTypeParamsOSIos, HTTPSummaryDeviceTypeParamsOSAndroid, HTTPSummaryDeviceTypeParamsOSChromeos, HTTPSummaryDeviceTypeParamsOSLinux, HTTPSummaryDeviceTypeParamsOSSmartTv:
		return true
	}
	return false
}

type HTTPSummaryDeviceTypeParamsTLSVersion string

const (
	HTTPSummaryDeviceTypeParamsTLSVersionTlSv1_0  HTTPSummaryDeviceTypeParamsTLSVersion = "TLSv1_0"
	HTTPSummaryDeviceTypeParamsTLSVersionTlSv1_1  HTTPSummaryDeviceTypeParamsTLSVersion = "TLSv1_1"
	HTTPSummaryDeviceTypeParamsTLSVersionTlSv1_2  HTTPSummaryDeviceTypeParamsTLSVersion = "TLSv1_2"
	HTTPSummaryDeviceTypeParamsTLSVersionTlSv1_3  HTTPSummaryDeviceTypeParamsTLSVersion = "TLSv1_3"
	HTTPSummaryDeviceTypeParamsTLSVersionTlSvQuic HTTPSummaryDeviceTypeParamsTLSVersion = "TLSvQUIC"
)

func (r HTTPSummaryDeviceTypeParamsTLSVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryDeviceTypeParamsTLSVersionTlSv1_0, HTTPSummaryDeviceTypeParamsTLSVersionTlSv1_1, HTTPSummaryDeviceTypeParamsTLSVersionTlSv1_2, HTTPSummaryDeviceTypeParamsTLSVersionTlSv1_3, HTTPSummaryDeviceTypeParamsTLSVersionTlSvQuic:
		return true
	}
	return false
}

type HTTPSummaryDeviceTypeResponseEnvelope struct {
	Result  HTTPSummaryDeviceTypeResponse             `json:"result,required"`
	Success bool                                      `json:"success,required"`
	JSON    httpSummaryDeviceTypeResponseEnvelopeJSON `json:"-"`
}

// httpSummaryDeviceTypeResponseEnvelopeJSON contains the JSON metadata for the
// struct [HTTPSummaryDeviceTypeResponseEnvelope]
type httpSummaryDeviceTypeResponseEnvelopeJSON struct {
	Result      apijson.Field
	Success     apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryDeviceTypeResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryDeviceTypeResponseEnvelopeJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryHTTPProtocolParams struct {
	// Filters results by Autonomous System. Specify one or more Autonomous System
	// Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from
	// results. For example, `-174, 3356` excludes results from AS174, but includes
	// results from AS3356.
	ASN param.Field[[]string] `query:"asn"`
	// Filters results by bot class. Refer to
	// [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/).
	BotClass param.Field[[]HTTPSummaryHTTPProtocolParamsBotClass] `query:"botClass"`
	// Filters results by browser family.
	BrowserFamily param.Field[[]HTTPSummaryHTTPProtocolParamsBrowserFamily] `query:"browserFamily"`
	// Filters results by continent. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude continents from results. For example, `-EU,NA`
	// excludes results from EU, but includes results from NA.
	Continent param.Field[[]string] `query:"continent"`
	// End of the date range (inclusive).
	DateEnd param.Field[[]time.Time] `query:"dateEnd" format:"date-time"`
	// Filters results by date range. For example, use `7d` and `7dcontrol` to compare
	// this week with the previous week. Use this parameter or set specific start and
	// end dates (`dateStart` and `dateEnd` parameters).
	DateRange param.Field[[]string] `query:"dateRange"`
	// Start of the date range.
	DateStart param.Field[[]time.Time] `query:"dateStart" format:"date-time"`
	// Filters results by device type.
	DeviceType param.Field[[]HTTPSummaryHTTPProtocolParamsDeviceType] `query:"deviceType"`
	// Format in which results will be returned.
	Format param.Field[HTTPSummaryHTTPProtocolParamsFormat] `query:"format"`
	// Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs.
	// Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689`
	// excludes results from the 2267056 (Lisbon), but includes results from 5128638
	// (New York).
	GeoID param.Field[[]string] `query:"geoId"`
	// Filters results by HTTP version.
	HTTPVersion param.Field[[]HTTPSummaryHTTPProtocolParamsHTTPVersion] `query:"httpVersion"`
	// Filters results by IP version (Ipv4 vs. IPv6).
	IPVersion param.Field[[]HTTPSummaryHTTPProtocolParamsIPVersion] `query:"ipVersion"`
	// Filters results by location. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude locations from results. For example, `-US,PT`
	// excludes results from the US, but includes results from PT.
	Location param.Field[[]string] `query:"location"`
	// Array of names used to label the series in the response.
	Name param.Field[[]string] `query:"name"`
	// Filters results by operating system.
	OS param.Field[[]HTTPSummaryHTTPProtocolParamsOS] `query:"os"`
	// Filters results by TLS version.
	TLSVersion param.Field[[]HTTPSummaryHTTPProtocolParamsTLSVersion] `query:"tlsVersion"`
}

// URLQuery serializes [HTTPSummaryHTTPProtocolParams]'s query parameters as
// `url.Values`.
func (r HTTPSummaryHTTPProtocolParams) URLQuery() (v url.Values) {
	return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
		ArrayFormat:  apiquery.ArrayQueryFormatRepeat,
		NestedFormat: apiquery.NestedQueryFormatDots,
	})
}

type HTTPSummaryHTTPProtocolParamsBotClass string

const (
	HTTPSummaryHTTPProtocolParamsBotClassLikelyAutomated HTTPSummaryHTTPProtocolParamsBotClass = "LIKELY_AUTOMATED"
	HTTPSummaryHTTPProtocolParamsBotClassLikelyHuman     HTTPSummaryHTTPProtocolParamsBotClass = "LIKELY_HUMAN"
)

func (r HTTPSummaryHTTPProtocolParamsBotClass) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPProtocolParamsBotClassLikelyAutomated, HTTPSummaryHTTPProtocolParamsBotClassLikelyHuman:
		return true
	}
	return false
}

type HTTPSummaryHTTPProtocolParamsBrowserFamily string

const (
	HTTPSummaryHTTPProtocolParamsBrowserFamilyChrome  HTTPSummaryHTTPProtocolParamsBrowserFamily = "CHROME"
	HTTPSummaryHTTPProtocolParamsBrowserFamilyEdge    HTTPSummaryHTTPProtocolParamsBrowserFamily = "EDGE"
	HTTPSummaryHTTPProtocolParamsBrowserFamilyFirefox HTTPSummaryHTTPProtocolParamsBrowserFamily = "FIREFOX"
	HTTPSummaryHTTPProtocolParamsBrowserFamilySafari  HTTPSummaryHTTPProtocolParamsBrowserFamily = "SAFARI"
)

func (r HTTPSummaryHTTPProtocolParamsBrowserFamily) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPProtocolParamsBrowserFamilyChrome, HTTPSummaryHTTPProtocolParamsBrowserFamilyEdge, HTTPSummaryHTTPProtocolParamsBrowserFamilyFirefox, HTTPSummaryHTTPProtocolParamsBrowserFamilySafari:
		return true
	}
	return false
}

type HTTPSummaryHTTPProtocolParamsDeviceType string

const (
	HTTPSummaryHTTPProtocolParamsDeviceTypeDesktop HTTPSummaryHTTPProtocolParamsDeviceType = "DESKTOP"
	HTTPSummaryHTTPProtocolParamsDeviceTypeMobile  HTTPSummaryHTTPProtocolParamsDeviceType = "MOBILE"
	HTTPSummaryHTTPProtocolParamsDeviceTypeOther   HTTPSummaryHTTPProtocolParamsDeviceType = "OTHER"
)

func (r HTTPSummaryHTTPProtocolParamsDeviceType) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPProtocolParamsDeviceTypeDesktop, HTTPSummaryHTTPProtocolParamsDeviceTypeMobile, HTTPSummaryHTTPProtocolParamsDeviceTypeOther:
		return true
	}
	return false
}

// Format in which results will be returned.
type HTTPSummaryHTTPProtocolParamsFormat string

const (
	HTTPSummaryHTTPProtocolParamsFormatJson HTTPSummaryHTTPProtocolParamsFormat = "JSON"
	HTTPSummaryHTTPProtocolParamsFormatCsv  HTTPSummaryHTTPProtocolParamsFormat = "CSV"
)

func (r HTTPSummaryHTTPProtocolParamsFormat) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPProtocolParamsFormatJson, HTTPSummaryHTTPProtocolParamsFormatCsv:
		return true
	}
	return false
}

type HTTPSummaryHTTPProtocolParamsHTTPVersion string

const (
	HTTPSummaryHTTPProtocolParamsHTTPVersionHttPv1 HTTPSummaryHTTPProtocolParamsHTTPVersion = "HTTPv1"
	HTTPSummaryHTTPProtocolParamsHTTPVersionHttPv2 HTTPSummaryHTTPProtocolParamsHTTPVersion = "HTTPv2"
	HTTPSummaryHTTPProtocolParamsHTTPVersionHttPv3 HTTPSummaryHTTPProtocolParamsHTTPVersion = "HTTPv3"
)

func (r HTTPSummaryHTTPProtocolParamsHTTPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPProtocolParamsHTTPVersionHttPv1, HTTPSummaryHTTPProtocolParamsHTTPVersionHttPv2, HTTPSummaryHTTPProtocolParamsHTTPVersionHttPv3:
		return true
	}
	return false
}

type HTTPSummaryHTTPProtocolParamsIPVersion string

const (
	HTTPSummaryHTTPProtocolParamsIPVersionIPv4 HTTPSummaryHTTPProtocolParamsIPVersion = "IPv4"
	HTTPSummaryHTTPProtocolParamsIPVersionIPv6 HTTPSummaryHTTPProtocolParamsIPVersion = "IPv6"
)

func (r HTTPSummaryHTTPProtocolParamsIPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPProtocolParamsIPVersionIPv4, HTTPSummaryHTTPProtocolParamsIPVersionIPv6:
		return true
	}
	return false
}

type HTTPSummaryHTTPProtocolParamsOS string

const (
	HTTPSummaryHTTPProtocolParamsOSWindows  HTTPSummaryHTTPProtocolParamsOS = "WINDOWS"
	HTTPSummaryHTTPProtocolParamsOSMacosx   HTTPSummaryHTTPProtocolParamsOS = "MACOSX"
	HTTPSummaryHTTPProtocolParamsOSIos      HTTPSummaryHTTPProtocolParamsOS = "IOS"
	HTTPSummaryHTTPProtocolParamsOSAndroid  HTTPSummaryHTTPProtocolParamsOS = "ANDROID"
	HTTPSummaryHTTPProtocolParamsOSChromeos HTTPSummaryHTTPProtocolParamsOS = "CHROMEOS"
	HTTPSummaryHTTPProtocolParamsOSLinux    HTTPSummaryHTTPProtocolParamsOS = "LINUX"
	HTTPSummaryHTTPProtocolParamsOSSmartTv  HTTPSummaryHTTPProtocolParamsOS = "SMART_TV"
)

func (r HTTPSummaryHTTPProtocolParamsOS) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPProtocolParamsOSWindows, HTTPSummaryHTTPProtocolParamsOSMacosx, HTTPSummaryHTTPProtocolParamsOSIos, HTTPSummaryHTTPProtocolParamsOSAndroid, HTTPSummaryHTTPProtocolParamsOSChromeos, HTTPSummaryHTTPProtocolParamsOSLinux, HTTPSummaryHTTPProtocolParamsOSSmartTv:
		return true
	}
	return false
}

type HTTPSummaryHTTPProtocolParamsTLSVersion string

const (
	HTTPSummaryHTTPProtocolParamsTLSVersionTlSv1_0  HTTPSummaryHTTPProtocolParamsTLSVersion = "TLSv1_0"
	HTTPSummaryHTTPProtocolParamsTLSVersionTlSv1_1  HTTPSummaryHTTPProtocolParamsTLSVersion = "TLSv1_1"
	HTTPSummaryHTTPProtocolParamsTLSVersionTlSv1_2  HTTPSummaryHTTPProtocolParamsTLSVersion = "TLSv1_2"
	HTTPSummaryHTTPProtocolParamsTLSVersionTlSv1_3  HTTPSummaryHTTPProtocolParamsTLSVersion = "TLSv1_3"
	HTTPSummaryHTTPProtocolParamsTLSVersionTlSvQuic HTTPSummaryHTTPProtocolParamsTLSVersion = "TLSvQUIC"
)

func (r HTTPSummaryHTTPProtocolParamsTLSVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPProtocolParamsTLSVersionTlSv1_0, HTTPSummaryHTTPProtocolParamsTLSVersionTlSv1_1, HTTPSummaryHTTPProtocolParamsTLSVersionTlSv1_2, HTTPSummaryHTTPProtocolParamsTLSVersionTlSv1_3, HTTPSummaryHTTPProtocolParamsTLSVersionTlSvQuic:
		return true
	}
	return false
}

type HTTPSummaryHTTPProtocolResponseEnvelope struct {
	Result  HTTPSummaryHTTPProtocolResponse             `json:"result,required"`
	Success bool                                        `json:"success,required"`
	JSON    httpSummaryHTTPProtocolResponseEnvelopeJSON `json:"-"`
}

// httpSummaryHTTPProtocolResponseEnvelopeJSON contains the JSON metadata for the
// struct [HTTPSummaryHTTPProtocolResponseEnvelope]
type httpSummaryHTTPProtocolResponseEnvelopeJSON struct {
	Result      apijson.Field
	Success     apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPProtocolResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPProtocolResponseEnvelopeJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryHTTPVersionParams struct {
	// Filters results by Autonomous System. Specify one or more Autonomous System
	// Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from
	// results. For example, `-174, 3356` excludes results from AS174, but includes
	// results from AS3356.
	ASN param.Field[[]string] `query:"asn"`
	// Filters results by bot class. Refer to
	// [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/).
	BotClass param.Field[[]HTTPSummaryHTTPVersionParamsBotClass] `query:"botClass"`
	// Filters results by browser family.
	BrowserFamily param.Field[[]HTTPSummaryHTTPVersionParamsBrowserFamily] `query:"browserFamily"`
	// Filters results by continent. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude continents from results. For example, `-EU,NA`
	// excludes results from EU, but includes results from NA.
	Continent param.Field[[]string] `query:"continent"`
	// End of the date range (inclusive).
	DateEnd param.Field[[]time.Time] `query:"dateEnd" format:"date-time"`
	// Filters results by date range. For example, use `7d` and `7dcontrol` to compare
	// this week with the previous week. Use this parameter or set specific start and
	// end dates (`dateStart` and `dateEnd` parameters).
	DateRange param.Field[[]string] `query:"dateRange"`
	// Start of the date range.
	DateStart param.Field[[]time.Time] `query:"dateStart" format:"date-time"`
	// Filters results by device type.
	DeviceType param.Field[[]HTTPSummaryHTTPVersionParamsDeviceType] `query:"deviceType"`
	// Format in which results will be returned.
	Format param.Field[HTTPSummaryHTTPVersionParamsFormat] `query:"format"`
	// Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs.
	// Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689`
	// excludes results from the 2267056 (Lisbon), but includes results from 5128638
	// (New York).
	GeoID param.Field[[]string] `query:"geoId"`
	// Filters results by HTTP protocol (HTTP vs. HTTPS).
	HTTPProtocol param.Field[[]HTTPSummaryHTTPVersionParamsHTTPProtocol] `query:"httpProtocol"`
	// Filters results by IP version (Ipv4 vs. IPv6).
	IPVersion param.Field[[]HTTPSummaryHTTPVersionParamsIPVersion] `query:"ipVersion"`
	// Filters results by location. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude locations from results. For example, `-US,PT`
	// excludes results from the US, but includes results from PT.
	Location param.Field[[]string] `query:"location"`
	// Array of names used to label the series in the response.
	Name param.Field[[]string] `query:"name"`
	// Filters results by operating system.
	OS param.Field[[]HTTPSummaryHTTPVersionParamsOS] `query:"os"`
	// Filters results by TLS version.
	TLSVersion param.Field[[]HTTPSummaryHTTPVersionParamsTLSVersion] `query:"tlsVersion"`
}

// URLQuery serializes [HTTPSummaryHTTPVersionParams]'s query parameters as
// `url.Values`.
func (r HTTPSummaryHTTPVersionParams) URLQuery() (v url.Values) {
	return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
		ArrayFormat:  apiquery.ArrayQueryFormatRepeat,
		NestedFormat: apiquery.NestedQueryFormatDots,
	})
}

type HTTPSummaryHTTPVersionParamsBotClass string

const (
	HTTPSummaryHTTPVersionParamsBotClassLikelyAutomated HTTPSummaryHTTPVersionParamsBotClass = "LIKELY_AUTOMATED"
	HTTPSummaryHTTPVersionParamsBotClassLikelyHuman     HTTPSummaryHTTPVersionParamsBotClass = "LIKELY_HUMAN"
)

func (r HTTPSummaryHTTPVersionParamsBotClass) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPVersionParamsBotClassLikelyAutomated, HTTPSummaryHTTPVersionParamsBotClassLikelyHuman:
		return true
	}
	return false
}

type HTTPSummaryHTTPVersionParamsBrowserFamily string

const (
	HTTPSummaryHTTPVersionParamsBrowserFamilyChrome  HTTPSummaryHTTPVersionParamsBrowserFamily = "CHROME"
	HTTPSummaryHTTPVersionParamsBrowserFamilyEdge    HTTPSummaryHTTPVersionParamsBrowserFamily = "EDGE"
	HTTPSummaryHTTPVersionParamsBrowserFamilyFirefox HTTPSummaryHTTPVersionParamsBrowserFamily = "FIREFOX"
	HTTPSummaryHTTPVersionParamsBrowserFamilySafari  HTTPSummaryHTTPVersionParamsBrowserFamily = "SAFARI"
)

func (r HTTPSummaryHTTPVersionParamsBrowserFamily) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPVersionParamsBrowserFamilyChrome, HTTPSummaryHTTPVersionParamsBrowserFamilyEdge, HTTPSummaryHTTPVersionParamsBrowserFamilyFirefox, HTTPSummaryHTTPVersionParamsBrowserFamilySafari:
		return true
	}
	return false
}

type HTTPSummaryHTTPVersionParamsDeviceType string

const (
	HTTPSummaryHTTPVersionParamsDeviceTypeDesktop HTTPSummaryHTTPVersionParamsDeviceType = "DESKTOP"
	HTTPSummaryHTTPVersionParamsDeviceTypeMobile  HTTPSummaryHTTPVersionParamsDeviceType = "MOBILE"
	HTTPSummaryHTTPVersionParamsDeviceTypeOther   HTTPSummaryHTTPVersionParamsDeviceType = "OTHER"
)

func (r HTTPSummaryHTTPVersionParamsDeviceType) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPVersionParamsDeviceTypeDesktop, HTTPSummaryHTTPVersionParamsDeviceTypeMobile, HTTPSummaryHTTPVersionParamsDeviceTypeOther:
		return true
	}
	return false
}

// Format in which results will be returned.
type HTTPSummaryHTTPVersionParamsFormat string

const (
	HTTPSummaryHTTPVersionParamsFormatJson HTTPSummaryHTTPVersionParamsFormat = "JSON"
	HTTPSummaryHTTPVersionParamsFormatCsv  HTTPSummaryHTTPVersionParamsFormat = "CSV"
)

func (r HTTPSummaryHTTPVersionParamsFormat) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPVersionParamsFormatJson, HTTPSummaryHTTPVersionParamsFormatCsv:
		return true
	}
	return false
}

type HTTPSummaryHTTPVersionParamsHTTPProtocol string

const (
	HTTPSummaryHTTPVersionParamsHTTPProtocolHTTP  HTTPSummaryHTTPVersionParamsHTTPProtocol = "HTTP"
	HTTPSummaryHTTPVersionParamsHTTPProtocolHTTPS HTTPSummaryHTTPVersionParamsHTTPProtocol = "HTTPS"
)

func (r HTTPSummaryHTTPVersionParamsHTTPProtocol) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPVersionParamsHTTPProtocolHTTP, HTTPSummaryHTTPVersionParamsHTTPProtocolHTTPS:
		return true
	}
	return false
}

type HTTPSummaryHTTPVersionParamsIPVersion string

const (
	HTTPSummaryHTTPVersionParamsIPVersionIPv4 HTTPSummaryHTTPVersionParamsIPVersion = "IPv4"
	HTTPSummaryHTTPVersionParamsIPVersionIPv6 HTTPSummaryHTTPVersionParamsIPVersion = "IPv6"
)

func (r HTTPSummaryHTTPVersionParamsIPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPVersionParamsIPVersionIPv4, HTTPSummaryHTTPVersionParamsIPVersionIPv6:
		return true
	}
	return false
}

type HTTPSummaryHTTPVersionParamsOS string

const (
	HTTPSummaryHTTPVersionParamsOSWindows  HTTPSummaryHTTPVersionParamsOS = "WINDOWS"
	HTTPSummaryHTTPVersionParamsOSMacosx   HTTPSummaryHTTPVersionParamsOS = "MACOSX"
	HTTPSummaryHTTPVersionParamsOSIos      HTTPSummaryHTTPVersionParamsOS = "IOS"
	HTTPSummaryHTTPVersionParamsOSAndroid  HTTPSummaryHTTPVersionParamsOS = "ANDROID"
	HTTPSummaryHTTPVersionParamsOSChromeos HTTPSummaryHTTPVersionParamsOS = "CHROMEOS"
	HTTPSummaryHTTPVersionParamsOSLinux    HTTPSummaryHTTPVersionParamsOS = "LINUX"
	HTTPSummaryHTTPVersionParamsOSSmartTv  HTTPSummaryHTTPVersionParamsOS = "SMART_TV"
)

func (r HTTPSummaryHTTPVersionParamsOS) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPVersionParamsOSWindows, HTTPSummaryHTTPVersionParamsOSMacosx, HTTPSummaryHTTPVersionParamsOSIos, HTTPSummaryHTTPVersionParamsOSAndroid, HTTPSummaryHTTPVersionParamsOSChromeos, HTTPSummaryHTTPVersionParamsOSLinux, HTTPSummaryHTTPVersionParamsOSSmartTv:
		return true
	}
	return false
}

type HTTPSummaryHTTPVersionParamsTLSVersion string

const (
	HTTPSummaryHTTPVersionParamsTLSVersionTlSv1_0  HTTPSummaryHTTPVersionParamsTLSVersion = "TLSv1_0"
	HTTPSummaryHTTPVersionParamsTLSVersionTlSv1_1  HTTPSummaryHTTPVersionParamsTLSVersion = "TLSv1_1"
	HTTPSummaryHTTPVersionParamsTLSVersionTlSv1_2  HTTPSummaryHTTPVersionParamsTLSVersion = "TLSv1_2"
	HTTPSummaryHTTPVersionParamsTLSVersionTlSv1_3  HTTPSummaryHTTPVersionParamsTLSVersion = "TLSv1_3"
	HTTPSummaryHTTPVersionParamsTLSVersionTlSvQuic HTTPSummaryHTTPVersionParamsTLSVersion = "TLSvQUIC"
)

func (r HTTPSummaryHTTPVersionParamsTLSVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryHTTPVersionParamsTLSVersionTlSv1_0, HTTPSummaryHTTPVersionParamsTLSVersionTlSv1_1, HTTPSummaryHTTPVersionParamsTLSVersionTlSv1_2, HTTPSummaryHTTPVersionParamsTLSVersionTlSv1_3, HTTPSummaryHTTPVersionParamsTLSVersionTlSvQuic:
		return true
	}
	return false
}

type HTTPSummaryHTTPVersionResponseEnvelope struct {
	Result  HTTPSummaryHTTPVersionResponse             `json:"result,required"`
	Success bool                                       `json:"success,required"`
	JSON    httpSummaryHTTPVersionResponseEnvelopeJSON `json:"-"`
}

// httpSummaryHTTPVersionResponseEnvelopeJSON contains the JSON metadata for the
// struct [HTTPSummaryHTTPVersionResponseEnvelope]
type httpSummaryHTTPVersionResponseEnvelopeJSON struct {
	Result      apijson.Field
	Success     apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryHTTPVersionResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryHTTPVersionResponseEnvelopeJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryIPVersionParams struct {
	// Filters results by Autonomous System. Specify one or more Autonomous System
	// Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from
	// results. For example, `-174, 3356` excludes results from AS174, but includes
	// results from AS3356.
	ASN param.Field[[]string] `query:"asn"`
	// Filters results by bot class. Refer to
	// [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/).
	BotClass param.Field[[]HTTPSummaryIPVersionParamsBotClass] `query:"botClass"`
	// Filters results by browser family.
	BrowserFamily param.Field[[]HTTPSummaryIPVersionParamsBrowserFamily] `query:"browserFamily"`
	// Filters results by continent. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude continents from results. For example, `-EU,NA`
	// excludes results from EU, but includes results from NA.
	Continent param.Field[[]string] `query:"continent"`
	// End of the date range (inclusive).
	DateEnd param.Field[[]time.Time] `query:"dateEnd" format:"date-time"`
	// Filters results by date range. For example, use `7d` and `7dcontrol` to compare
	// this week with the previous week. Use this parameter or set specific start and
	// end dates (`dateStart` and `dateEnd` parameters).
	DateRange param.Field[[]string] `query:"dateRange"`
	// Start of the date range.
	DateStart param.Field[[]time.Time] `query:"dateStart" format:"date-time"`
	// Filters results by device type.
	DeviceType param.Field[[]HTTPSummaryIPVersionParamsDeviceType] `query:"deviceType"`
	// Format in which results will be returned.
	Format param.Field[HTTPSummaryIPVersionParamsFormat] `query:"format"`
	// Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs.
	// Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689`
	// excludes results from the 2267056 (Lisbon), but includes results from 5128638
	// (New York).
	GeoID param.Field[[]string] `query:"geoId"`
	// Filters results by HTTP protocol (HTTP vs. HTTPS).
	HTTPProtocol param.Field[[]HTTPSummaryIPVersionParamsHTTPProtocol] `query:"httpProtocol"`
	// Filters results by HTTP version.
	HTTPVersion param.Field[[]HTTPSummaryIPVersionParamsHTTPVersion] `query:"httpVersion"`
	// Filters results by location. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude locations from results. For example, `-US,PT`
	// excludes results from the US, but includes results from PT.
	Location param.Field[[]string] `query:"location"`
	// Array of names used to label the series in the response.
	Name param.Field[[]string] `query:"name"`
	// Filters results by operating system.
	OS param.Field[[]HTTPSummaryIPVersionParamsOS] `query:"os"`
	// Filters results by TLS version.
	TLSVersion param.Field[[]HTTPSummaryIPVersionParamsTLSVersion] `query:"tlsVersion"`
}

// URLQuery serializes [HTTPSummaryIPVersionParams]'s query parameters as
// `url.Values`.
func (r HTTPSummaryIPVersionParams) URLQuery() (v url.Values) {
	return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
		ArrayFormat:  apiquery.ArrayQueryFormatRepeat,
		NestedFormat: apiquery.NestedQueryFormatDots,
	})
}

type HTTPSummaryIPVersionParamsBotClass string

const (
	HTTPSummaryIPVersionParamsBotClassLikelyAutomated HTTPSummaryIPVersionParamsBotClass = "LIKELY_AUTOMATED"
	HTTPSummaryIPVersionParamsBotClassLikelyHuman     HTTPSummaryIPVersionParamsBotClass = "LIKELY_HUMAN"
)

func (r HTTPSummaryIPVersionParamsBotClass) IsKnown() bool {
	switch r {
	case HTTPSummaryIPVersionParamsBotClassLikelyAutomated, HTTPSummaryIPVersionParamsBotClassLikelyHuman:
		return true
	}
	return false
}

type HTTPSummaryIPVersionParamsBrowserFamily string

const (
	HTTPSummaryIPVersionParamsBrowserFamilyChrome  HTTPSummaryIPVersionParamsBrowserFamily = "CHROME"
	HTTPSummaryIPVersionParamsBrowserFamilyEdge    HTTPSummaryIPVersionParamsBrowserFamily = "EDGE"
	HTTPSummaryIPVersionParamsBrowserFamilyFirefox HTTPSummaryIPVersionParamsBrowserFamily = "FIREFOX"
	HTTPSummaryIPVersionParamsBrowserFamilySafari  HTTPSummaryIPVersionParamsBrowserFamily = "SAFARI"
)

func (r HTTPSummaryIPVersionParamsBrowserFamily) IsKnown() bool {
	switch r {
	case HTTPSummaryIPVersionParamsBrowserFamilyChrome, HTTPSummaryIPVersionParamsBrowserFamilyEdge, HTTPSummaryIPVersionParamsBrowserFamilyFirefox, HTTPSummaryIPVersionParamsBrowserFamilySafari:
		return true
	}
	return false
}

type HTTPSummaryIPVersionParamsDeviceType string

const (
	HTTPSummaryIPVersionParamsDeviceTypeDesktop HTTPSummaryIPVersionParamsDeviceType = "DESKTOP"
	HTTPSummaryIPVersionParamsDeviceTypeMobile  HTTPSummaryIPVersionParamsDeviceType = "MOBILE"
	HTTPSummaryIPVersionParamsDeviceTypeOther   HTTPSummaryIPVersionParamsDeviceType = "OTHER"
)

func (r HTTPSummaryIPVersionParamsDeviceType) IsKnown() bool {
	switch r {
	case HTTPSummaryIPVersionParamsDeviceTypeDesktop, HTTPSummaryIPVersionParamsDeviceTypeMobile, HTTPSummaryIPVersionParamsDeviceTypeOther:
		return true
	}
	return false
}

// Format in which results will be returned.
type HTTPSummaryIPVersionParamsFormat string

const (
	HTTPSummaryIPVersionParamsFormatJson HTTPSummaryIPVersionParamsFormat = "JSON"
	HTTPSummaryIPVersionParamsFormatCsv  HTTPSummaryIPVersionParamsFormat = "CSV"
)

func (r HTTPSummaryIPVersionParamsFormat) IsKnown() bool {
	switch r {
	case HTTPSummaryIPVersionParamsFormatJson, HTTPSummaryIPVersionParamsFormatCsv:
		return true
	}
	return false
}

type HTTPSummaryIPVersionParamsHTTPProtocol string

const (
	HTTPSummaryIPVersionParamsHTTPProtocolHTTP  HTTPSummaryIPVersionParamsHTTPProtocol = "HTTP"
	HTTPSummaryIPVersionParamsHTTPProtocolHTTPS HTTPSummaryIPVersionParamsHTTPProtocol = "HTTPS"
)

func (r HTTPSummaryIPVersionParamsHTTPProtocol) IsKnown() bool {
	switch r {
	case HTTPSummaryIPVersionParamsHTTPProtocolHTTP, HTTPSummaryIPVersionParamsHTTPProtocolHTTPS:
		return true
	}
	return false
}

type HTTPSummaryIPVersionParamsHTTPVersion string

const (
	HTTPSummaryIPVersionParamsHTTPVersionHttPv1 HTTPSummaryIPVersionParamsHTTPVersion = "HTTPv1"
	HTTPSummaryIPVersionParamsHTTPVersionHttPv2 HTTPSummaryIPVersionParamsHTTPVersion = "HTTPv2"
	HTTPSummaryIPVersionParamsHTTPVersionHttPv3 HTTPSummaryIPVersionParamsHTTPVersion = "HTTPv3"
)

func (r HTTPSummaryIPVersionParamsHTTPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryIPVersionParamsHTTPVersionHttPv1, HTTPSummaryIPVersionParamsHTTPVersionHttPv2, HTTPSummaryIPVersionParamsHTTPVersionHttPv3:
		return true
	}
	return false
}

type HTTPSummaryIPVersionParamsOS string

const (
	HTTPSummaryIPVersionParamsOSWindows  HTTPSummaryIPVersionParamsOS = "WINDOWS"
	HTTPSummaryIPVersionParamsOSMacosx   HTTPSummaryIPVersionParamsOS = "MACOSX"
	HTTPSummaryIPVersionParamsOSIos      HTTPSummaryIPVersionParamsOS = "IOS"
	HTTPSummaryIPVersionParamsOSAndroid  HTTPSummaryIPVersionParamsOS = "ANDROID"
	HTTPSummaryIPVersionParamsOSChromeos HTTPSummaryIPVersionParamsOS = "CHROMEOS"
	HTTPSummaryIPVersionParamsOSLinux    HTTPSummaryIPVersionParamsOS = "LINUX"
	HTTPSummaryIPVersionParamsOSSmartTv  HTTPSummaryIPVersionParamsOS = "SMART_TV"
)

func (r HTTPSummaryIPVersionParamsOS) IsKnown() bool {
	switch r {
	case HTTPSummaryIPVersionParamsOSWindows, HTTPSummaryIPVersionParamsOSMacosx, HTTPSummaryIPVersionParamsOSIos, HTTPSummaryIPVersionParamsOSAndroid, HTTPSummaryIPVersionParamsOSChromeos, HTTPSummaryIPVersionParamsOSLinux, HTTPSummaryIPVersionParamsOSSmartTv:
		return true
	}
	return false
}

type HTTPSummaryIPVersionParamsTLSVersion string

const (
	HTTPSummaryIPVersionParamsTLSVersionTlSv1_0  HTTPSummaryIPVersionParamsTLSVersion = "TLSv1_0"
	HTTPSummaryIPVersionParamsTLSVersionTlSv1_1  HTTPSummaryIPVersionParamsTLSVersion = "TLSv1_1"
	HTTPSummaryIPVersionParamsTLSVersionTlSv1_2  HTTPSummaryIPVersionParamsTLSVersion = "TLSv1_2"
	HTTPSummaryIPVersionParamsTLSVersionTlSv1_3  HTTPSummaryIPVersionParamsTLSVersion = "TLSv1_3"
	HTTPSummaryIPVersionParamsTLSVersionTlSvQuic HTTPSummaryIPVersionParamsTLSVersion = "TLSvQUIC"
)

func (r HTTPSummaryIPVersionParamsTLSVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryIPVersionParamsTLSVersionTlSv1_0, HTTPSummaryIPVersionParamsTLSVersionTlSv1_1, HTTPSummaryIPVersionParamsTLSVersionTlSv1_2, HTTPSummaryIPVersionParamsTLSVersionTlSv1_3, HTTPSummaryIPVersionParamsTLSVersionTlSvQuic:
		return true
	}
	return false
}

type HTTPSummaryIPVersionResponseEnvelope struct {
	Result  HTTPSummaryIPVersionResponse             `json:"result,required"`
	Success bool                                     `json:"success,required"`
	JSON    httpSummaryIPVersionResponseEnvelopeJSON `json:"-"`
}

// httpSummaryIPVersionResponseEnvelopeJSON contains the JSON metadata for the
// struct [HTTPSummaryIPVersionResponseEnvelope]
type httpSummaryIPVersionResponseEnvelopeJSON struct {
	Result      apijson.Field
	Success     apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryIPVersionResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryIPVersionResponseEnvelopeJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryOSParams struct {
	// Filters results by Autonomous System. Specify one or more Autonomous System
	// Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from
	// results. For example, `-174, 3356` excludes results from AS174, but includes
	// results from AS3356.
	ASN param.Field[[]string] `query:"asn"`
	// Filters results by bot class. Refer to
	// [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/).
	BotClass param.Field[[]HTTPSummaryOSParamsBotClass] `query:"botClass"`
	// Filters results by browser family.
	BrowserFamily param.Field[[]HTTPSummaryOSParamsBrowserFamily] `query:"browserFamily"`
	// Filters results by continent. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude continents from results. For example, `-EU,NA`
	// excludes results from EU, but includes results from NA.
	Continent param.Field[[]string] `query:"continent"`
	// End of the date range (inclusive).
	DateEnd param.Field[[]time.Time] `query:"dateEnd" format:"date-time"`
	// Filters results by date range. For example, use `7d` and `7dcontrol` to compare
	// this week with the previous week. Use this parameter or set specific start and
	// end dates (`dateStart` and `dateEnd` parameters).
	DateRange param.Field[[]string] `query:"dateRange"`
	// Start of the date range.
	DateStart param.Field[[]time.Time] `query:"dateStart" format:"date-time"`
	// Filters results by device type.
	DeviceType param.Field[[]HTTPSummaryOSParamsDeviceType] `query:"deviceType"`
	// Format in which results will be returned.
	Format param.Field[HTTPSummaryOSParamsFormat] `query:"format"`
	// Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs.
	// Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689`
	// excludes results from the 2267056 (Lisbon), but includes results from 5128638
	// (New York).
	GeoID param.Field[[]string] `query:"geoId"`
	// Filters results by HTTP protocol (HTTP vs. HTTPS).
	HTTPProtocol param.Field[[]HTTPSummaryOSParamsHTTPProtocol] `query:"httpProtocol"`
	// Filters results by HTTP version.
	HTTPVersion param.Field[[]HTTPSummaryOSParamsHTTPVersion] `query:"httpVersion"`
	// Filters results by IP version (Ipv4 vs. IPv6).
	IPVersion param.Field[[]HTTPSummaryOSParamsIPVersion] `query:"ipVersion"`
	// Filters results by location. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude locations from results. For example, `-US,PT`
	// excludes results from the US, but includes results from PT.
	Location param.Field[[]string] `query:"location"`
	// Array of names used to label the series in the response.
	Name param.Field[[]string] `query:"name"`
	// Filters results by TLS version.
	TLSVersion param.Field[[]HTTPSummaryOSParamsTLSVersion] `query:"tlsVersion"`
}

// URLQuery serializes [HTTPSummaryOSParams]'s query parameters as `url.Values`.
func (r HTTPSummaryOSParams) URLQuery() (v url.Values) {
	return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
		ArrayFormat:  apiquery.ArrayQueryFormatRepeat,
		NestedFormat: apiquery.NestedQueryFormatDots,
	})
}

type HTTPSummaryOSParamsBotClass string

const (
	HTTPSummaryOSParamsBotClassLikelyAutomated HTTPSummaryOSParamsBotClass = "LIKELY_AUTOMATED"
	HTTPSummaryOSParamsBotClassLikelyHuman     HTTPSummaryOSParamsBotClass = "LIKELY_HUMAN"
)

func (r HTTPSummaryOSParamsBotClass) IsKnown() bool {
	switch r {
	case HTTPSummaryOSParamsBotClassLikelyAutomated, HTTPSummaryOSParamsBotClassLikelyHuman:
		return true
	}
	return false
}

type HTTPSummaryOSParamsBrowserFamily string

const (
	HTTPSummaryOSParamsBrowserFamilyChrome  HTTPSummaryOSParamsBrowserFamily = "CHROME"
	HTTPSummaryOSParamsBrowserFamilyEdge    HTTPSummaryOSParamsBrowserFamily = "EDGE"
	HTTPSummaryOSParamsBrowserFamilyFirefox HTTPSummaryOSParamsBrowserFamily = "FIREFOX"
	HTTPSummaryOSParamsBrowserFamilySafari  HTTPSummaryOSParamsBrowserFamily = "SAFARI"
)

func (r HTTPSummaryOSParamsBrowserFamily) IsKnown() bool {
	switch r {
	case HTTPSummaryOSParamsBrowserFamilyChrome, HTTPSummaryOSParamsBrowserFamilyEdge, HTTPSummaryOSParamsBrowserFamilyFirefox, HTTPSummaryOSParamsBrowserFamilySafari:
		return true
	}
	return false
}

type HTTPSummaryOSParamsDeviceType string

const (
	HTTPSummaryOSParamsDeviceTypeDesktop HTTPSummaryOSParamsDeviceType = "DESKTOP"
	HTTPSummaryOSParamsDeviceTypeMobile  HTTPSummaryOSParamsDeviceType = "MOBILE"
	HTTPSummaryOSParamsDeviceTypeOther   HTTPSummaryOSParamsDeviceType = "OTHER"
)

func (r HTTPSummaryOSParamsDeviceType) IsKnown() bool {
	switch r {
	case HTTPSummaryOSParamsDeviceTypeDesktop, HTTPSummaryOSParamsDeviceTypeMobile, HTTPSummaryOSParamsDeviceTypeOther:
		return true
	}
	return false
}

// Format in which results will be returned.
type HTTPSummaryOSParamsFormat string

const (
	HTTPSummaryOSParamsFormatJson HTTPSummaryOSParamsFormat = "JSON"
	HTTPSummaryOSParamsFormatCsv  HTTPSummaryOSParamsFormat = "CSV"
)

func (r HTTPSummaryOSParamsFormat) IsKnown() bool {
	switch r {
	case HTTPSummaryOSParamsFormatJson, HTTPSummaryOSParamsFormatCsv:
		return true
	}
	return false
}

type HTTPSummaryOSParamsHTTPProtocol string

const (
	HTTPSummaryOSParamsHTTPProtocolHTTP  HTTPSummaryOSParamsHTTPProtocol = "HTTP"
	HTTPSummaryOSParamsHTTPProtocolHTTPS HTTPSummaryOSParamsHTTPProtocol = "HTTPS"
)

func (r HTTPSummaryOSParamsHTTPProtocol) IsKnown() bool {
	switch r {
	case HTTPSummaryOSParamsHTTPProtocolHTTP, HTTPSummaryOSParamsHTTPProtocolHTTPS:
		return true
	}
	return false
}

type HTTPSummaryOSParamsHTTPVersion string

const (
	HTTPSummaryOSParamsHTTPVersionHttPv1 HTTPSummaryOSParamsHTTPVersion = "HTTPv1"
	HTTPSummaryOSParamsHTTPVersionHttPv2 HTTPSummaryOSParamsHTTPVersion = "HTTPv2"
	HTTPSummaryOSParamsHTTPVersionHttPv3 HTTPSummaryOSParamsHTTPVersion = "HTTPv3"
)

func (r HTTPSummaryOSParamsHTTPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryOSParamsHTTPVersionHttPv1, HTTPSummaryOSParamsHTTPVersionHttPv2, HTTPSummaryOSParamsHTTPVersionHttPv3:
		return true
	}
	return false
}

type HTTPSummaryOSParamsIPVersion string

const (
	HTTPSummaryOSParamsIPVersionIPv4 HTTPSummaryOSParamsIPVersion = "IPv4"
	HTTPSummaryOSParamsIPVersionIPv6 HTTPSummaryOSParamsIPVersion = "IPv6"
)

func (r HTTPSummaryOSParamsIPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryOSParamsIPVersionIPv4, HTTPSummaryOSParamsIPVersionIPv6:
		return true
	}
	return false
}

type HTTPSummaryOSParamsTLSVersion string

const (
	HTTPSummaryOSParamsTLSVersionTlSv1_0  HTTPSummaryOSParamsTLSVersion = "TLSv1_0"
	HTTPSummaryOSParamsTLSVersionTlSv1_1  HTTPSummaryOSParamsTLSVersion = "TLSv1_1"
	HTTPSummaryOSParamsTLSVersionTlSv1_2  HTTPSummaryOSParamsTLSVersion = "TLSv1_2"
	HTTPSummaryOSParamsTLSVersionTlSv1_3  HTTPSummaryOSParamsTLSVersion = "TLSv1_3"
	HTTPSummaryOSParamsTLSVersionTlSvQuic HTTPSummaryOSParamsTLSVersion = "TLSvQUIC"
)

func (r HTTPSummaryOSParamsTLSVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryOSParamsTLSVersionTlSv1_0, HTTPSummaryOSParamsTLSVersionTlSv1_1, HTTPSummaryOSParamsTLSVersionTlSv1_2, HTTPSummaryOSParamsTLSVersionTlSv1_3, HTTPSummaryOSParamsTLSVersionTlSvQuic:
		return true
	}
	return false
}

type HTTPSummaryOSResponseEnvelope struct {
	Result  HTTPSummaryOSResponse             `json:"result,required"`
	Success bool                              `json:"success,required"`
	JSON    httpSummaryOSResponseEnvelopeJSON `json:"-"`
}

// httpSummaryOSResponseEnvelopeJSON contains the JSON metadata for the struct
// [HTTPSummaryOSResponseEnvelope]
type httpSummaryOSResponseEnvelopeJSON struct {
	Result      apijson.Field
	Success     apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryOSResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryOSResponseEnvelopeJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryPostQuantumParams struct {
	// Filters results by Autonomous System. Specify one or more Autonomous System
	// Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from
	// results. For example, `-174, 3356` excludes results from AS174, but includes
	// results from AS3356.
	ASN param.Field[[]string] `query:"asn"`
	// Filters results by bot class. Refer to
	// [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/).
	BotClass param.Field[[]HTTPSummaryPostQuantumParamsBotClass] `query:"botClass"`
	// Filters results by browser family.
	BrowserFamily param.Field[[]HTTPSummaryPostQuantumParamsBrowserFamily] `query:"browserFamily"`
	// Filters results by continent. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude continents from results. For example, `-EU,NA`
	// excludes results from EU, but includes results from NA.
	Continent param.Field[[]string] `query:"continent"`
	// End of the date range (inclusive).
	DateEnd param.Field[[]time.Time] `query:"dateEnd" format:"date-time"`
	// Filters results by date range. For example, use `7d` and `7dcontrol` to compare
	// this week with the previous week. Use this parameter or set specific start and
	// end dates (`dateStart` and `dateEnd` parameters).
	DateRange param.Field[[]string] `query:"dateRange"`
	// Start of the date range.
	DateStart param.Field[[]time.Time] `query:"dateStart" format:"date-time"`
	// Filters results by device type.
	DeviceType param.Field[[]HTTPSummaryPostQuantumParamsDeviceType] `query:"deviceType"`
	// Format in which results will be returned.
	Format param.Field[HTTPSummaryPostQuantumParamsFormat] `query:"format"`
	// Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs.
	// Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689`
	// excludes results from the 2267056 (Lisbon), but includes results from 5128638
	// (New York).
	GeoID param.Field[[]string] `query:"geoId"`
	// Filters results by HTTP protocol (HTTP vs. HTTPS).
	HTTPProtocol param.Field[[]HTTPSummaryPostQuantumParamsHTTPProtocol] `query:"httpProtocol"`
	// Filters results by HTTP version.
	HTTPVersion param.Field[[]HTTPSummaryPostQuantumParamsHTTPVersion] `query:"httpVersion"`
	// Filters results by IP version (Ipv4 vs. IPv6).
	IPVersion param.Field[[]HTTPSummaryPostQuantumParamsIPVersion] `query:"ipVersion"`
	// Filters results by location. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude locations from results. For example, `-US,PT`
	// excludes results from the US, but includes results from PT.
	Location param.Field[[]string] `query:"location"`
	// Array of names used to label the series in the response.
	Name param.Field[[]string] `query:"name"`
	// Filters results by operating system.
	OS param.Field[[]HTTPSummaryPostQuantumParamsOS] `query:"os"`
	// Filters results by TLS version.
	TLSVersion param.Field[[]HTTPSummaryPostQuantumParamsTLSVersion] `query:"tlsVersion"`
}

// URLQuery serializes [HTTPSummaryPostQuantumParams]'s query parameters as
// `url.Values`.
func (r HTTPSummaryPostQuantumParams) URLQuery() (v url.Values) {
	return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
		ArrayFormat:  apiquery.ArrayQueryFormatRepeat,
		NestedFormat: apiquery.NestedQueryFormatDots,
	})
}

type HTTPSummaryPostQuantumParamsBotClass string

const (
	HTTPSummaryPostQuantumParamsBotClassLikelyAutomated HTTPSummaryPostQuantumParamsBotClass = "LIKELY_AUTOMATED"
	HTTPSummaryPostQuantumParamsBotClassLikelyHuman     HTTPSummaryPostQuantumParamsBotClass = "LIKELY_HUMAN"
)

func (r HTTPSummaryPostQuantumParamsBotClass) IsKnown() bool {
	switch r {
	case HTTPSummaryPostQuantumParamsBotClassLikelyAutomated, HTTPSummaryPostQuantumParamsBotClassLikelyHuman:
		return true
	}
	return false
}

type HTTPSummaryPostQuantumParamsBrowserFamily string

const (
	HTTPSummaryPostQuantumParamsBrowserFamilyChrome  HTTPSummaryPostQuantumParamsBrowserFamily = "CHROME"
	HTTPSummaryPostQuantumParamsBrowserFamilyEdge    HTTPSummaryPostQuantumParamsBrowserFamily = "EDGE"
	HTTPSummaryPostQuantumParamsBrowserFamilyFirefox HTTPSummaryPostQuantumParamsBrowserFamily = "FIREFOX"
	HTTPSummaryPostQuantumParamsBrowserFamilySafari  HTTPSummaryPostQuantumParamsBrowserFamily = "SAFARI"
)

func (r HTTPSummaryPostQuantumParamsBrowserFamily) IsKnown() bool {
	switch r {
	case HTTPSummaryPostQuantumParamsBrowserFamilyChrome, HTTPSummaryPostQuantumParamsBrowserFamilyEdge, HTTPSummaryPostQuantumParamsBrowserFamilyFirefox, HTTPSummaryPostQuantumParamsBrowserFamilySafari:
		return true
	}
	return false
}

type HTTPSummaryPostQuantumParamsDeviceType string

const (
	HTTPSummaryPostQuantumParamsDeviceTypeDesktop HTTPSummaryPostQuantumParamsDeviceType = "DESKTOP"
	HTTPSummaryPostQuantumParamsDeviceTypeMobile  HTTPSummaryPostQuantumParamsDeviceType = "MOBILE"
	HTTPSummaryPostQuantumParamsDeviceTypeOther   HTTPSummaryPostQuantumParamsDeviceType = "OTHER"
)

func (r HTTPSummaryPostQuantumParamsDeviceType) IsKnown() bool {
	switch r {
	case HTTPSummaryPostQuantumParamsDeviceTypeDesktop, HTTPSummaryPostQuantumParamsDeviceTypeMobile, HTTPSummaryPostQuantumParamsDeviceTypeOther:
		return true
	}
	return false
}

// Format in which results will be returned.
type HTTPSummaryPostQuantumParamsFormat string

const (
	HTTPSummaryPostQuantumParamsFormatJson HTTPSummaryPostQuantumParamsFormat = "JSON"
	HTTPSummaryPostQuantumParamsFormatCsv  HTTPSummaryPostQuantumParamsFormat = "CSV"
)

func (r HTTPSummaryPostQuantumParamsFormat) IsKnown() bool {
	switch r {
	case HTTPSummaryPostQuantumParamsFormatJson, HTTPSummaryPostQuantumParamsFormatCsv:
		return true
	}
	return false
}

type HTTPSummaryPostQuantumParamsHTTPProtocol string

const (
	HTTPSummaryPostQuantumParamsHTTPProtocolHTTP  HTTPSummaryPostQuantumParamsHTTPProtocol = "HTTP"
	HTTPSummaryPostQuantumParamsHTTPProtocolHTTPS HTTPSummaryPostQuantumParamsHTTPProtocol = "HTTPS"
)

func (r HTTPSummaryPostQuantumParamsHTTPProtocol) IsKnown() bool {
	switch r {
	case HTTPSummaryPostQuantumParamsHTTPProtocolHTTP, HTTPSummaryPostQuantumParamsHTTPProtocolHTTPS:
		return true
	}
	return false
}

type HTTPSummaryPostQuantumParamsHTTPVersion string

const (
	HTTPSummaryPostQuantumParamsHTTPVersionHttPv1 HTTPSummaryPostQuantumParamsHTTPVersion = "HTTPv1"
	HTTPSummaryPostQuantumParamsHTTPVersionHttPv2 HTTPSummaryPostQuantumParamsHTTPVersion = "HTTPv2"
	HTTPSummaryPostQuantumParamsHTTPVersionHttPv3 HTTPSummaryPostQuantumParamsHTTPVersion = "HTTPv3"
)

func (r HTTPSummaryPostQuantumParamsHTTPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryPostQuantumParamsHTTPVersionHttPv1, HTTPSummaryPostQuantumParamsHTTPVersionHttPv2, HTTPSummaryPostQuantumParamsHTTPVersionHttPv3:
		return true
	}
	return false
}

type HTTPSummaryPostQuantumParamsIPVersion string

const (
	HTTPSummaryPostQuantumParamsIPVersionIPv4 HTTPSummaryPostQuantumParamsIPVersion = "IPv4"
	HTTPSummaryPostQuantumParamsIPVersionIPv6 HTTPSummaryPostQuantumParamsIPVersion = "IPv6"
)

func (r HTTPSummaryPostQuantumParamsIPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryPostQuantumParamsIPVersionIPv4, HTTPSummaryPostQuantumParamsIPVersionIPv6:
		return true
	}
	return false
}

type HTTPSummaryPostQuantumParamsOS string

const (
	HTTPSummaryPostQuantumParamsOSWindows  HTTPSummaryPostQuantumParamsOS = "WINDOWS"
	HTTPSummaryPostQuantumParamsOSMacosx   HTTPSummaryPostQuantumParamsOS = "MACOSX"
	HTTPSummaryPostQuantumParamsOSIos      HTTPSummaryPostQuantumParamsOS = "IOS"
	HTTPSummaryPostQuantumParamsOSAndroid  HTTPSummaryPostQuantumParamsOS = "ANDROID"
	HTTPSummaryPostQuantumParamsOSChromeos HTTPSummaryPostQuantumParamsOS = "CHROMEOS"
	HTTPSummaryPostQuantumParamsOSLinux    HTTPSummaryPostQuantumParamsOS = "LINUX"
	HTTPSummaryPostQuantumParamsOSSmartTv  HTTPSummaryPostQuantumParamsOS = "SMART_TV"
)

func (r HTTPSummaryPostQuantumParamsOS) IsKnown() bool {
	switch r {
	case HTTPSummaryPostQuantumParamsOSWindows, HTTPSummaryPostQuantumParamsOSMacosx, HTTPSummaryPostQuantumParamsOSIos, HTTPSummaryPostQuantumParamsOSAndroid, HTTPSummaryPostQuantumParamsOSChromeos, HTTPSummaryPostQuantumParamsOSLinux, HTTPSummaryPostQuantumParamsOSSmartTv:
		return true
	}
	return false
}

type HTTPSummaryPostQuantumParamsTLSVersion string

const (
	HTTPSummaryPostQuantumParamsTLSVersionTlSv1_0  HTTPSummaryPostQuantumParamsTLSVersion = "TLSv1_0"
	HTTPSummaryPostQuantumParamsTLSVersionTlSv1_1  HTTPSummaryPostQuantumParamsTLSVersion = "TLSv1_1"
	HTTPSummaryPostQuantumParamsTLSVersionTlSv1_2  HTTPSummaryPostQuantumParamsTLSVersion = "TLSv1_2"
	HTTPSummaryPostQuantumParamsTLSVersionTlSv1_3  HTTPSummaryPostQuantumParamsTLSVersion = "TLSv1_3"
	HTTPSummaryPostQuantumParamsTLSVersionTlSvQuic HTTPSummaryPostQuantumParamsTLSVersion = "TLSvQUIC"
)

func (r HTTPSummaryPostQuantumParamsTLSVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryPostQuantumParamsTLSVersionTlSv1_0, HTTPSummaryPostQuantumParamsTLSVersionTlSv1_1, HTTPSummaryPostQuantumParamsTLSVersionTlSv1_2, HTTPSummaryPostQuantumParamsTLSVersionTlSv1_3, HTTPSummaryPostQuantumParamsTLSVersionTlSvQuic:
		return true
	}
	return false
}

type HTTPSummaryPostQuantumResponseEnvelope struct {
	Result  HTTPSummaryPostQuantumResponse             `json:"result,required"`
	Success bool                                       `json:"success,required"`
	JSON    httpSummaryPostQuantumResponseEnvelopeJSON `json:"-"`
}

// httpSummaryPostQuantumResponseEnvelopeJSON contains the JSON metadata for the
// struct [HTTPSummaryPostQuantumResponseEnvelope]
type httpSummaryPostQuantumResponseEnvelopeJSON struct {
	Result      apijson.Field
	Success     apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryPostQuantumResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryPostQuantumResponseEnvelopeJSON) RawJSON() string {
	return r.raw
}

type HTTPSummaryTLSVersionParams struct {
	// Filters results by Autonomous System. Specify one or more Autonomous System
	// Numbers (ASNs) as a comma-separated list. Prefix with `-` to exclude ASNs from
	// results. For example, `-174, 3356` excludes results from AS174, but includes
	// results from AS3356.
	ASN param.Field[[]string] `query:"asn"`
	// Filters results by bot class. Refer to
	// [Bot classes](https://developers.cloudflare.com/radar/concepts/bot-classes/).
	BotClass param.Field[[]HTTPSummaryTLSVersionParamsBotClass] `query:"botClass"`
	// Filters results by browser family.
	BrowserFamily param.Field[[]HTTPSummaryTLSVersionParamsBrowserFamily] `query:"browserFamily"`
	// Filters results by continent. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude continents from results. For example, `-EU,NA`
	// excludes results from EU, but includes results from NA.
	Continent param.Field[[]string] `query:"continent"`
	// End of the date range (inclusive).
	DateEnd param.Field[[]time.Time] `query:"dateEnd" format:"date-time"`
	// Filters results by date range. For example, use `7d` and `7dcontrol` to compare
	// this week with the previous week. Use this parameter or set specific start and
	// end dates (`dateStart` and `dateEnd` parameters).
	DateRange param.Field[[]string] `query:"dateRange"`
	// Start of the date range.
	DateStart param.Field[[]time.Time] `query:"dateStart" format:"date-time"`
	// Filters results by device type.
	DeviceType param.Field[[]HTTPSummaryTLSVersionParamsDeviceType] `query:"deviceType"`
	// Format in which results will be returned.
	Format param.Field[HTTPSummaryTLSVersionParamsFormat] `query:"format"`
	// Filters results by Geolocation. Specify a comma-separated list of GeoNames IDs.
	// Prefix with `-` to exclude geoIds from results. For example, `-2267056,360689`
	// excludes results from the 2267056 (Lisbon), but includes results from 5128638
	// (New York).
	GeoID param.Field[[]string] `query:"geoId"`
	// Filters results by HTTP protocol (HTTP vs. HTTPS).
	HTTPProtocol param.Field[[]HTTPSummaryTLSVersionParamsHTTPProtocol] `query:"httpProtocol"`
	// Filters results by HTTP version.
	HTTPVersion param.Field[[]HTTPSummaryTLSVersionParamsHTTPVersion] `query:"httpVersion"`
	// Filters results by IP version (Ipv4 vs. IPv6).
	IPVersion param.Field[[]HTTPSummaryTLSVersionParamsIPVersion] `query:"ipVersion"`
	// Filters results by location. Specify a comma-separated list of alpha-2 codes.
	// Prefix with `-` to exclude locations from results. For example, `-US,PT`
	// excludes results from the US, but includes results from PT.
	Location param.Field[[]string] `query:"location"`
	// Array of names used to label the series in the response.
	Name param.Field[[]string] `query:"name"`
	// Filters results by operating system.
	OS param.Field[[]HTTPSummaryTLSVersionParamsOS] `query:"os"`
}

// URLQuery serializes [HTTPSummaryTLSVersionParams]'s query parameters as
// `url.Values`.
func (r HTTPSummaryTLSVersionParams) URLQuery() (v url.Values) {
	return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
		ArrayFormat:  apiquery.ArrayQueryFormatRepeat,
		NestedFormat: apiquery.NestedQueryFormatDots,
	})
}

type HTTPSummaryTLSVersionParamsBotClass string

const (
	HTTPSummaryTLSVersionParamsBotClassLikelyAutomated HTTPSummaryTLSVersionParamsBotClass = "LIKELY_AUTOMATED"
	HTTPSummaryTLSVersionParamsBotClassLikelyHuman     HTTPSummaryTLSVersionParamsBotClass = "LIKELY_HUMAN"
)

func (r HTTPSummaryTLSVersionParamsBotClass) IsKnown() bool {
	switch r {
	case HTTPSummaryTLSVersionParamsBotClassLikelyAutomated, HTTPSummaryTLSVersionParamsBotClassLikelyHuman:
		return true
	}
	return false
}

type HTTPSummaryTLSVersionParamsBrowserFamily string

const (
	HTTPSummaryTLSVersionParamsBrowserFamilyChrome  HTTPSummaryTLSVersionParamsBrowserFamily = "CHROME"
	HTTPSummaryTLSVersionParamsBrowserFamilyEdge    HTTPSummaryTLSVersionParamsBrowserFamily = "EDGE"
	HTTPSummaryTLSVersionParamsBrowserFamilyFirefox HTTPSummaryTLSVersionParamsBrowserFamily = "FIREFOX"
	HTTPSummaryTLSVersionParamsBrowserFamilySafari  HTTPSummaryTLSVersionParamsBrowserFamily = "SAFARI"
)

func (r HTTPSummaryTLSVersionParamsBrowserFamily) IsKnown() bool {
	switch r {
	case HTTPSummaryTLSVersionParamsBrowserFamilyChrome, HTTPSummaryTLSVersionParamsBrowserFamilyEdge, HTTPSummaryTLSVersionParamsBrowserFamilyFirefox, HTTPSummaryTLSVersionParamsBrowserFamilySafari:
		return true
	}
	return false
}

type HTTPSummaryTLSVersionParamsDeviceType string

const (
	HTTPSummaryTLSVersionParamsDeviceTypeDesktop HTTPSummaryTLSVersionParamsDeviceType = "DESKTOP"
	HTTPSummaryTLSVersionParamsDeviceTypeMobile  HTTPSummaryTLSVersionParamsDeviceType = "MOBILE"
	HTTPSummaryTLSVersionParamsDeviceTypeOther   HTTPSummaryTLSVersionParamsDeviceType = "OTHER"
)

func (r HTTPSummaryTLSVersionParamsDeviceType) IsKnown() bool {
	switch r {
	case HTTPSummaryTLSVersionParamsDeviceTypeDesktop, HTTPSummaryTLSVersionParamsDeviceTypeMobile, HTTPSummaryTLSVersionParamsDeviceTypeOther:
		return true
	}
	return false
}

// Format in which results will be returned.
type HTTPSummaryTLSVersionParamsFormat string

const (
	HTTPSummaryTLSVersionParamsFormatJson HTTPSummaryTLSVersionParamsFormat = "JSON"
	HTTPSummaryTLSVersionParamsFormatCsv  HTTPSummaryTLSVersionParamsFormat = "CSV"
)

func (r HTTPSummaryTLSVersionParamsFormat) IsKnown() bool {
	switch r {
	case HTTPSummaryTLSVersionParamsFormatJson, HTTPSummaryTLSVersionParamsFormatCsv:
		return true
	}
	return false
}

type HTTPSummaryTLSVersionParamsHTTPProtocol string

const (
	HTTPSummaryTLSVersionParamsHTTPProtocolHTTP  HTTPSummaryTLSVersionParamsHTTPProtocol = "HTTP"
	HTTPSummaryTLSVersionParamsHTTPProtocolHTTPS HTTPSummaryTLSVersionParamsHTTPProtocol = "HTTPS"
)

func (r HTTPSummaryTLSVersionParamsHTTPProtocol) IsKnown() bool {
	switch r {
	case HTTPSummaryTLSVersionParamsHTTPProtocolHTTP, HTTPSummaryTLSVersionParamsHTTPProtocolHTTPS:
		return true
	}
	return false
}

type HTTPSummaryTLSVersionParamsHTTPVersion string

const (
	HTTPSummaryTLSVersionParamsHTTPVersionHttPv1 HTTPSummaryTLSVersionParamsHTTPVersion = "HTTPv1"
	HTTPSummaryTLSVersionParamsHTTPVersionHttPv2 HTTPSummaryTLSVersionParamsHTTPVersion = "HTTPv2"
	HTTPSummaryTLSVersionParamsHTTPVersionHttPv3 HTTPSummaryTLSVersionParamsHTTPVersion = "HTTPv3"
)

func (r HTTPSummaryTLSVersionParamsHTTPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryTLSVersionParamsHTTPVersionHttPv1, HTTPSummaryTLSVersionParamsHTTPVersionHttPv2, HTTPSummaryTLSVersionParamsHTTPVersionHttPv3:
		return true
	}
	return false
}

type HTTPSummaryTLSVersionParamsIPVersion string

const (
	HTTPSummaryTLSVersionParamsIPVersionIPv4 HTTPSummaryTLSVersionParamsIPVersion = "IPv4"
	HTTPSummaryTLSVersionParamsIPVersionIPv6 HTTPSummaryTLSVersionParamsIPVersion = "IPv6"
)

func (r HTTPSummaryTLSVersionParamsIPVersion) IsKnown() bool {
	switch r {
	case HTTPSummaryTLSVersionParamsIPVersionIPv4, HTTPSummaryTLSVersionParamsIPVersionIPv6:
		return true
	}
	return false
}

type HTTPSummaryTLSVersionParamsOS string

const (
	HTTPSummaryTLSVersionParamsOSWindows  HTTPSummaryTLSVersionParamsOS = "WINDOWS"
	HTTPSummaryTLSVersionParamsOSMacosx   HTTPSummaryTLSVersionParamsOS = "MACOSX"
	HTTPSummaryTLSVersionParamsOSIos      HTTPSummaryTLSVersionParamsOS = "IOS"
	HTTPSummaryTLSVersionParamsOSAndroid  HTTPSummaryTLSVersionParamsOS = "ANDROID"
	HTTPSummaryTLSVersionParamsOSChromeos HTTPSummaryTLSVersionParamsOS = "CHROMEOS"
	HTTPSummaryTLSVersionParamsOSLinux    HTTPSummaryTLSVersionParamsOS = "LINUX"
	HTTPSummaryTLSVersionParamsOSSmartTv  HTTPSummaryTLSVersionParamsOS = "SMART_TV"
)

func (r HTTPSummaryTLSVersionParamsOS) IsKnown() bool {
	switch r {
	case HTTPSummaryTLSVersionParamsOSWindows, HTTPSummaryTLSVersionParamsOSMacosx, HTTPSummaryTLSVersionParamsOSIos, HTTPSummaryTLSVersionParamsOSAndroid, HTTPSummaryTLSVersionParamsOSChromeos, HTTPSummaryTLSVersionParamsOSLinux, HTTPSummaryTLSVersionParamsOSSmartTv:
		return true
	}
	return false
}

type HTTPSummaryTLSVersionResponseEnvelope struct {
	Result  HTTPSummaryTLSVersionResponse             `json:"result,required"`
	Success bool                                      `json:"success,required"`
	JSON    httpSummaryTLSVersionResponseEnvelopeJSON `json:"-"`
}

// httpSummaryTLSVersionResponseEnvelopeJSON contains the JSON metadata for the
// struct [HTTPSummaryTLSVersionResponseEnvelope]
type httpSummaryTLSVersionResponseEnvelopeJSON struct {
	Result      apijson.Field
	Success     apijson.Field
	raw         string
	ExtraFields map[string]apijson.Field
}

func (r *HTTPSummaryTLSVersionResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
	return apijson.UnmarshalRoot(data, r)
}

func (r httpSummaryTLSVersionResponseEnvelopeJSON) RawJSON() string {
	return r.raw
}
